1列の最大値を探したいです。 10行ごとに5(OK)を入力し、その行全体を印刷します。例えば。最初の10行目から5列目の最大値は「1.1824」で、対応する行全体は「10_M62 6:3.0561 405.69 1.1824」です。 10行ごとに5列で最大値を見つけて、上記のように列全体を印刷したいと思います。
次のコマンドを試しましたが、最初の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
これは、入力値がすべて負であるか、入力が正確に10行の倍数ではない場合でも、ヘッダー行とヘッダー行の間に空白行がいくつあっても、すべてのUNIXシステム上のすべてのシェルで機能します。データ。アーク:
$ 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