{ paste -d, /dev/null "${in}"/folders_names.txt | tr -d \n | cut -c2-; \
sed 's|.*|'"${in}"'/&/file.txt|' "${in}"/folders_names.txt \
| tr \n \0 | xargs -0 paste -d,; } > all_files.csv
O primeiro comando
paste -d, /dev/null "${in}"/folders_names.txt | tr -d \n | cut -c2-
imprime o cabeçalho, por ex. se seu "${in}"/folders_names.txt
for:
w
x
y
z
imprime w,x,y,z
O comando sed
processa o mesmo arquivo para que cada linha se torne um caminho, por exemplo if in=a/b/c
:
a/b/c/w/file.txt
a/b/c/x/file.txt
a/b/c/y/file.txt
a/b/c/z/file.txt
e o resultado é tr
formado em uma entrada separada nula alimentada para paste
via xargs -0
, então a saída final é, por exemplo,
w,x,y,z
5,4,5,7
8,2,1,5
6,1,1,1
1,3,5,9
3,1,8,9
Se nenhuma linha em folders_names.txt
continha espaços em branco (ou seja, nomes de arquivo sane), você poderia executar:
{ paste -d, /dev/null "${in}"/folders_names.txt | tr -d \n | cut -c2-; \
paste -d, $(sed 's|.*|'"${in}"'/&/file.txt|' "${in}"/folders_names.txt); } > all_files.csv
como o segundo comando seria expandido para
paste -d, a/b/c/w/file.txt a/b/c/x/file.txt a/b/c/y/file.txt a/b/c/z/file.txt