Я думаю, что вы ищете простое итеративное решение вроде этого:
#!/bin/sh
( tmpfile=/tmp/result
read firstfilename
cat "$firstfilename" >$tmpfile.in
while read filename
do cgatools join \
--beta \
--input $tmpfile.in "$filename" \
--match <specification> \
--overlap <overlap_spec> \
--select <output_fields> \
--always-dump \
--output-mode compact >$tmpfile.out
mv $tmpfile.out $tmpfile.in
done
) < file_of_filenames
echo "result is in $tmpfile.in"
Это читает строки (т.е. имена файлов) по одной из вашего file_of_filenames
и запускает cgatools
, используя это имя файла и предыдущий вывод, создавая новый выходной файл $tmpfile.out
. Этот выходной файл переименовывается в
входной файл $tmpfile.in
и цикл продолжается.
Для обработки начала, первая строка имени файла считывается отдельно (в переменную firstfilename
), и этот файл копируется во входной файл, так чтобы
у нас есть 2 файла для объединения. Поскольку все команды находятся внутри "()", это
гарантирует, что чтение внутри цикла while продолжится с того места, на котором остановилось первое чтение.