awk를 사용하여 텍스트 파일의 모든 최대값을 인쇄합니다.

awk를 사용하여 텍스트 파일의 모든 최대값을 인쇄합니다.

한 열의 최대값을 모두 출력하려고 합니다.

그래서 입력은 다음과 같습니다

John.      Marketing.   5000.  
Marcus.    Manager.     9500.  
Jason.     SW           9500.  
Cindy.     Developer.   6000.  

내가 원하는 출력은

   name: Marcus, sal: 9500.    
   name: Jason, sal: 9500      

지금까지 내 코드는

    BEGIN {a=0}

    {
        if ($3> a)
           max=$3;
        output=$1
     }

    END{
      print "name: ", output, "sal:", max
    }

답변1

파일을 두 번 구문 분석해야 하며, 먼저 최대값을 찾은 다음 해당 줄을 인쇄해야 합니다. 예를 들어( max양수라고 가정):

파싱.awk

NR == FNR && $3  > max { max = $3 }
NR != FNR && $3 == max

다음과 같이 실행하세요:

awk -f paste.awk infile{,}

{ print "name:", $1, "sal:", $3 }형식을 변경 하려면 마지막 줄에 추가하세요 parse.awk. 출력은 다음과 같습니다.

name: Marcus. sal: 9500.
name: Jason. sal: 9500.

답변2

awk 스크립트를 사용하면 다음을 수행할 수 있습니다.

tst.awk

!max || $3 > max {max=$3; delete array}
$3 == max {array[$0]="name:" OFS $1 OFS "sal:" OFS $3}
END{
        for(key in array){
                print array[key]
        }
}

그게 다야 :

  • 존재하지 않거나 설정된 것 max보다 작으면 $3배열을 삭제합니다.max$3array
  • 같으면 출력을 배열에 저장합니다 $3.max
  • END스크립트 끝에서 array인쇄된 각 키 에 대해

값 목록이 max너무 크지 않은 경우 이 스크립트를 사용할 수 있습니다. 그렇지 않으면@토르의 답변더 나은 해결책이 될 수도 있습니다.

관련 정보