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