Encuentre el máximo cada 10 filas en una columna en particular e imprima la fila completa

Encuentre el máximo cada 10 filas en una columna en particular e imprima la fila completa

Me gustaría encontrar el valor máximo en la columna no. 5 (Determinar) por cada 10 filas y luego imprimir la fila completa correspondiente. Por ej. en las primeras 10 filas, el valor máximo en la quinta columna es '1,1824' y la fila completa correspondiente es "10_M62 6: 3,0561 405,69 1,1824". Quiero encontrar el valor máximo en la quinta columna por cada 10 filas y luego imprimir la columna completa como se muestra arriba.

Probé el siguiente comando, funciona durante las primeras 30 filas, después de lo cual da respuestas incorrectas. No estoy seguro de lo que me estoy perdiendo. Por favor ayúdame.

awk 'm<$10{m=$10;n=$5" "$2$3 $4" "$6" "$7" "$8" "$9} !((NR+2)%10){print $1,n,m;m=n=""}'

Por favor, avíseme si no lo tengo claro. He proporcionado la lista de muestra a continuación.

Name      No.           Value1   Value2   Determine
 
10_M62    1:            2.4578   504.44   0.0013  
10_M62    2:            2.6155   474.03   0.0010  
10_M62    3:            2.8581   433.80   0.0418  
10_M62    4:            2.9552   419.54   0.3863  
10_M62    5:            2.9809   415.93   0.1014  
10_M62    6:            3.0561   405.69   1.1824  
10_M62    7:            3.3083   374.77   0.0719  
10_M62    8:            3.5159   352.63   0.0242  
10_M62    9:            3.6366   340.94   0.0023  
10_M62   10:            3.6553   339.19   0.0049  
11_M63    1:            1.9677   630.10   0.0075  
11_M63    2:            2.3544   526.62   1.8099  
11_M63    3:            2.7363   453.12   0.0028  
11_M63    4:            2.7437   451.88   0.0044  
11_M63    5:            2.8913   428.81   0.0569  
11_M63    6:            2.9497   420.32   0.3310  
11_M63    7:            2.9688   417.63   0.0889  
11_M63    8:            3.0038   412.76   0.0330  
11_M63    9:            3.0792   402.65   0.2730  
11_M63   10:            3.0805   402.48   0.0914  
...

Respuesta1

Esto funcionará usando cualquier awk en cualquier shell en cada cuadro de UNIX incluso si sus valores de entrada son todos negativos y/o su entrada no es un múltiplo exacto de 10 líneas y no importa cuántas líneas en blanco haya entre su línea de encabezado y sus datos:

$ cat tst.awk
NR==1 { print; next }
!NF { next }
(++numLines) % 10 == 1 {
    printf "%s", maxLine
    maxVal = $5
    maxLine = ""
}
$5 >= maxVal {
    maxVal = $5
    maxLine = $0 ORS
}
END { printf "%s", maxLine }

.

$ awk -f tst.awk file
Name      No.           Value1   Value2   Determine
10_M62    6:            3.0561   405.69   1.1824
11_M63    2:            2.3544   526.62   1.8099

información relacionada