다음 스냅샷이 포함된 파일이 있습니다.
Name age class
John 12 3
Mark 10 1
Philip 15 6
열 사이의 구분 기호는 여러 개의 공백입니다.
클래스 카테고리에서 가장 높은 숫자를 인쇄하고 싶습니다.
원하는 결과를 얻는 방법을 알려주십시오.
답변1
awk 'NR > 1 && (max == "" || $NF > max) { max = $NF } END { print max }' file
그러면 파일을 읽고 첫 번째 행(헤더 행)을 제외한 모든 행의 마지막 필드에 이전에 본 값보다 큰 숫자 값이 있을 때마다 해당 값이 변수에 기억됩니다 max
. 이전에 기억된 값이 없으면 이 값도 기억됩니다.
마지막으로 max
변수 값이 인쇄됩니다. 이는 모든 행(첫 번째 행 제외)의 마지막 필드에 표시되는 최대값입니다.
이는 class
열이 항상 각 행의 끝에 있다고 가정합니다.
특수 변수 NF
및 NR
는 각각 현재 레코드의 필드 수와 지금까지 읽은 레코드 수입니다. 값은 $NF
현재 레코드의 마지막 필드 값입니다.
마지막 열에서 가장 큰 숫자가 있는 전체 행을 얻으려면 위 코드를 약간 수정하여 관련 데이터를 기억하고 인쇄하면 됩니다.
awk 'NR > 1 && (max == "" || $NF > max) { max = $NF; line = $0 } END { print line }' file
답변2
sort
이 기능은 주요 위치를 정의하여 달성됩니다. 다음을 시도해 볼 수 있습니다.
sort --key=3 file