{ 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
Первая команда
paste -d, /dev/null "${in}"/folders_names.txt | tr -d \\n | cut -c2-
печатает заголовок, например если ваш "$ {in}" / folder_names.txt
равен:
w
x
y
z
, он печатает w, x, y, z
Команда sed
обрабатывает то же самое файл, так что каждая строка становится путем, например 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
и результат tr
преобразуется в ввод, разделенный пустыми значениями, поданный на paste
через xargs - 0
, поэтому конечный результат будет, например,
w,x,y,z
5,4,5,7
8,2,1,5
6,1,1,1
1,3,5,9
3,1,8,9
Если ни одна строка в вашем имя_папокs.txt
не содержит пробелов (то есть нормальных имен файлов), вы можете просто запустить:
{ 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
, поскольку вторая команда расширится до
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
¡Ay, error mío! Necesito una opción más:
setopt -o incappendhistory
Con esto, funciona.