Como usar o 'awk' para determinar o valor máximo em múltiplos subconjuntos de dados dentro de um arquivo?

3

Bom dia,

Estou usando awk e tentando determinar o valor máximo de vários conjuntos de dados em um arquivo. Digamos que eu tenha os dados:

    1 2 3
  4 5 6 7 8
  9 8 7 6 5
    4 3 2
    1 2 3
  4 6 7 8 7
  7 8 7 6 5
    4 3 2

Eu gostaria que a saída fosse:

9
8

Como cada quatro linhas é um subconjunto de dados, e 9 é o valor máximo do primeiro conjunto e 8 é o valor máximo do segundo. Estou colocando os dados acima no primeiro bloco de código para:

awk 'NR%4<4 || NR==4 {for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;}; END { print maxval;}' > file

Mas só retorna o valor máximo de todo o arquivo:

9

Eu queria saber se é possível imprimir um valor máximo de cada n linhas (n = 4 aqui) em um comando awk, ou eu preciso dividi-lo? Eu pensava que a NR% 4 < 4 || NR == 4 diria ao resto da função para executar em cada quatro linhas, mas parece que está olhando para todos os dados e determinando apenas um 'maxval'.

Obrigado.

    
por Henry 28.12.2016 / 17:21

2 respostas

3
awk '{for(i=1;i<=NF;i++) if($i>maxval) maxval=$i;}
     NR%4==0 { print maxval ; maxval= -1}'
    
por 28.12.2016 / 17:35
0

Alternativa, usando uma matriz.

awk '{x=split($0,a);asort(a);if(a[x]>maxval)maxval=a[x]}
     NR%4==0 { print maxval ; maxval= -1}'
    
por 28.12.2016 / 22:44

Tags