10 行ごとに列番号 5 (決定) の最大値を見つけて、対応する行全体を印刷したいと思います。たとえば、最初の 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 ボックス上の任意のシェルの任意の awk を使用して機能します。
$ 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


