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


