특정 열의 10개 행마다 최대값을 찾아 전체 행을 인쇄합니다.

특정 열의 10개 행마다 최대값을 찾아 전체 행을 인쇄합니다.

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

관련 정보