Я хотел бы найти максимальное значение в столбце № 5 (Определить) для каждых 10 строк, а затем распечатать соответствующую целую строку. Например, в первых 10 строках максимальное значение в 5-м столбце равно '1,1824', а соответствующая целая строка равна "10_M62 6: 3,0561 405,69 1,1824". Я хочу найти максимальное значение в 5-м столбце для каждых 10 строк, а затем распечатать целую колонку, как показано выше.
Я попробовал следующую команду, она работает для первых 30 строк, после чего выдает неправильные ответы. Я не уверен, что я упускаю. Пожалуйста, помогите мне.
awk 'm<$10{m=$10;n=$5" "$2$3 $4" "$6" "$7" "$8" "$9} !((NR+2)%10){print $1,n,m;m=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
...
решение1
Это будет работать с любым awk в любой оболочке на любой машине UNIX, даже если все входные значения отрицательные и/или ваши входные данные не являются кратными 10 строкам, и неважно, сколько пустых строк находится между строкой заголовка и данными:
$ 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


