Record.txt에는 다음과 같은 정보가 있습니다.
Nosi IT 3000
David HR 4000
awk 또는 작동할 수 있는 다른 도구를 사용하여 가장 높은 급여를 받는 직원의 급여를 표시하려면 어떻게 해야 합니까? records.txt에 저장된 경우. David 4000을 보여주고 싶습니다.
답변1
사용하기 쉬운 GNUdatamash
:
$ datamash -Wf max 6 < record.txt | cut -f 4,6
David 4000
datamash
열 6에서 가장 높은 값을 가진 행을 인쇄하고 cut
관심 있는 열만 가져오는 데 사용됩니다 .
답변2
답변3
를 사용하려면 awk
제공한 예제 입력에 대해 다음이 작동해야 합니다.
awk 'NF==0 {next} !name {max=$3; name=$1} {if ($3>max) {max=$3; name=$1};} END{printf("%s : %d\n",name,max)}' records.txt
빈 줄을 건너뛰고 비어 있지 않은 첫 번째 줄의 데이터로 최대값 max
과 해당 이름(변수로 표시 name
, 0
즉 여기서 문자열이 필요한 경우 초기화되지 않음) 을 초기화합니다. 현재 급여보다 큰 급여가 발견되면 이를 다음(비어 있지 않은) 행의 해당 값으로 바꿉니다 max
. 마지막으로 이름과 값을 인쇄합니다.
더 짧은 버전, Stephen Kitt와 Alex Stragies가 제안한 대로:
awk 'NF>0 && (!name || $3>max) {max=$3; name=$1} END {printf("%s : %d\n",name,max);}' records.txt
이는 비어 있지 않은 첫 번째 행과 세 번째 열 값이 보다 큰 모든 행에 대해max
설정 및 가 동일하다는 사실을 활용합니다. 빈 줄을 건너뛰는 것을 먼저 수행하기 위한 전제 조건으로 요구하여 간단하게 통합할 수도 있습니다.name
max
NF>0
답변4
$ sort -k3,3rn file | head -n 1
David HR 4000
이는 파일을 세 번째 열의 내림차순으로 숫자별로 정렬한 다음 해당 결과의 첫 번째 행을 사용하여 선택합니다 head
.
파일에서 탭을 필드 구분 기호로 사용하는 경우 -t $'\t'
with 를 사용하세요 sort
. 이렇게 하면 공백이 포함된 필드를 가질 수도 있습니다.
이름과 급여만 표시하려면 awk '{ print $1,$3; exit }'
대신 를 사용하세요 head -n 1
.