Se você modificar o código awk
, pode ser resolvido por um único processo awk
e nenhum loop de shell:
awk 'FNR==1{if(o)close(o);o=FILENAME;sub(/\.tex/,"_sorted.tex",o)}{ORS=FNR%3?" ":"\n";print>o}' *.tex
Não é uma beleza, apenas insignificantemente mais rápida.
Explicações conforme solicitado no comentário.
FNR
( f ile n umber ou r ecord) é semelhante a NR
( n umber ou r ecord), mas enquanto NR
é um número sequencial contínuo de todos os registros de entrada, FNR
é redefinido para 1 quando o processamento de um novo arquivo de entrada é iniciado.
Uma alternativa somente gawk
4.0 para o FNR==1
é o padrão especial BEGINFILE
.
awk '
FNR==1{ # first record of an input file?
if(o)close(o); # was previous output file? close it
o=FILENAME;sub(/\.tex/,"_sorted.tex",o) # new output file name
}
{
ORS=FNR%3?" ":"\n"; # set ORS based on FNR (not NR as in the original code)
print>o # print to the current output file
}
' *.tex