csv 파일에서 주어진 열의 최대 수 찾기

csv 파일에서 주어진 열의 최대 수 찾기

4개의 열이 있는 공백으로 구분된 파일이 있습니다. awk를 사용하여 각 열의 최대값을 찾고 싶습니다. 내 awk 스크립트는 파일 끝에 이 정보를 출력해야 합니다.

예를 들어, 내 파일이 다음과 같다면:

              Banana  Oranges  Lemons 
Case_1        50      243      143
Case_2        45      443      103
Case_3        56      234      128
Case_4        64      164      183
Case_5        54      342      176

awk 스크립트를 실행한 후 다음과 같이 출력되어야 합니다.

              Banana  Oranges  Lemons 
Case_1        50      243      143
Case_2        45      443      103
Case_3        56      234      128
Case_4        64      164      183
Case_5        54      342      176

Banana maximum happens at case 4: The complete line is
Case_4        64      164      183

Orange maximum happens at case 2: The complete line is
Case_2        45      443      103

awk 코드 작성을 도와줄 수 있는 사람이 있나요?

답변1

BEGIN {
 col[0]=""
 max[0]=""
 casenum=0
 text[0]=""
}

{ print $0 }

NR == 1 { split($0,col,FS); }

/Case_/ && NR > 1 { 
  casenum++
  split($0,vals,FS)
  text[casenum]=$0
  for(i=1;i<=length(col);i++)
  { 
    if(vals[i+1] > max[i])
    {
      max[i]=vals[i+1]
      item[i]=casenum
    }
  }
}

END {
  for(i=1;i<=length(col);i++)
  {
    printf "\n%s maximum happens at case %d: The complete line is\n",col[i],item[i]
    print text[item[i]]
  }
}

그러면 다음과 같은 출력이 생성됩니다.

              Banana  Oranges  Lemons 
Case_1        50      243      143
Case_2        45      443      103
Case_3        56      234      128
Case_4        64      164      183
Case_5        54      342      176

Banana maximum happens at case 4: The complete line is
Case_4        64      164      183 

Oranges maximum happens at case 2: The complete line is
Case_2        45      443      103 

Lemons maximum happens at case 4: The complete line is
Case_4        64      164      183 

관련 정보