Eu usaria uma abordagem ligeiramente diferente e faria mais do trabalho diretamente no awk. Primeiro, use o FNR
que volta para 1 sempre que um novo arquivo é processado por awk
e alimenta todos os arquivos a ou b para awk
de uma vez:
$ for f in a b; do
awk '(FNR==1 && n>1){
av=x/n;if(av>max){
max=av;f=FILENAME
}
x=0; n=0
}
{x+=$4;n=FNR}
END{
if(x/n>max){print x/n,FILENAME}
else{print max,f}'
} "$f"[1..4]/"$f"[1..4].txt; done
18898.4 a3.txt
18806 b4.txt
Isso nos dá os dois arquivos com a maior média. Para movê-los, você poderia simplesmente remover o valor da saída do script anterior, mantendo apenas o nome do arquivo e passá-lo diretamente para o comando cp
:
$ cp -v $(for f in a b; do awk '(FNR==1 && n>1){av=x/n;if(av>max){max=av;f=FILENAME};x=0;n=0}{x+=$4;n=FNR} END{if(x/n>max) print x/n,FILENAME; else print max,f}' "$f"[1-4]/"$f"[1..4].txt; done) bar/
‘a3.txt’ -> ‘bar/a3.txt’
‘b4.txt’ -> ‘bar/b4.txt’
Observe que isso será interrompido se seus nomes de arquivos contiverem espaços em branco ou caracteres glob.