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