Acho que você está procurando uma solução iterativa simples como esta:
#!/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"
Isto lê linhas (ou seja, nomes de arquivos) um por um do seu file_of_filenames
e executa cgatools
usando esse nome de arquivo e a saída anterior, gerando um novo arquivo de saída $tmpfile.out
. Este arquivo de saída é renomeado para ser
o arquivo de entrada $tmpfile.in
e o loop continua.
Para lidar com o início, a primeira linha do nome do arquivo é lida separadamente (na variável firstfilename
), e esse arquivo é copiado no arquivo de entrada para que
temos 2 arquivos para participar. Já que todos os comandos estão dentro de "()" isto
garante que a leitura dentro do loop while continue onde a primeira leitura parou.