Se você for fazer isso para milhares de arquivos, você pode evitar a execução de vários comandos por arquivo. Com o GNU awk
:
printf '%s#! /bin/ksh93
firstpass=true
for file in *.txt; do
"$firstpass" || print '\n===========\n'
firstpass=false
command /opt/ast/bin/cat < "$file"
done > combined.out
' ./*.txt | xargs -r0 gawk '
BEGINFILE {if (NR) print "\n==========\n"};1' > combined.out
Não dê uma extensão .txt
ao arquivo de saída se você for colocá-lo no mesmo diretório, ou ele será selecionado como um arquivo de entrada e causar um loop infinito (provavelmente o seu problema no primeiro lugar).
Ou use um shell no qual cat
é criado como ksh93
:
printf '%s#! /bin/ksh93
firstpass=true
for file in *.txt; do
"$firstpass" || print '\n===========\n'
firstpass=false
command /opt/ast/bin/cat < "$file"
done > combined.out
' ./*.txt | xargs -r0 gawk '
BEGINFILE {if (NR) print "\n==========\n"};1' > combined.out
Todos esses comandos no loop são internos, portanto, executá-los não envolve a criação de novos processos nem o carregamento de executáveis externos, o que tornaria o desempenho tolerável.