Aqui está meu arquivo (na realidade, alguns milhões de linhas):
1 75
2 188
3 279
4 267
5 100
6 28
7 479
8 325
9 225
10 181
Eu quero encontrar o máximo da segunda coluna para as primeiras 5 linhas (linhas 1-5) e imprimir esse valor máximo, mas também o valor correspondente da primeira coluna. Em seguida, passe para as próximas cinco linhas (linhas 6-10) e faça o mesmo.
A saída deve ser:
3 279
7 479
Até agora eu posso calcular o máximo de rolamento desta maneira:
awk '{for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;} NR%5==0 { print maxval; maxval= -1}' input.file
No entanto, não consegui imprimir o respectivo valor da primeira coluna. Tentei definir uma segunda variável como want=$1
e depois tentar, print maxval, want
mas sem sucesso. Tenho uma vaga impressão de que isso poderia ser feito com matrizes, mas todas as minhas tentativas foram malsucedidas.
TP
Eu não acho que fazer um loop sobre os campos é o que você quer aqui. Em vez disso, basta olhar para o número do registro (ou número do registro do arquivo para permitir que funcione em vários arquivos) módulo 5:
se
FNR
for 1,6,... OU$2
for maior que o máximo atual em execução, salve a linha/máximo atualif
FNR
is 5,10,... imprime a linha atual / maxNão é uma
awk
resposta, mas para quem gosta de ferramentas de shell, esse método GNUsplit
funciona: