Column3의 최대값을 구하고 Column1과 2의 값만 출력

Column3의 최대값을 구하고 Column1과 2의 값만 출력

유닉스에서는 Column3의 최대값을 찾아 Column2와 Column1의 해당 값(단 Column3의 값은 아님)을 새 파일에 인쇄하는 명령을 찾으려고 합니다.

 Column1     Column2     Column3
   A          1          25
   B          2          6
   C          3          2
   D          4          16
   E          5          10

유닉스 명령은 무엇이어야 합니까? grep, awk 또는 datamash를 사용해야 합니까?

답변1

awk데이터가 예제 데이터와 정확히 동일한 형식이라고 가정하면 다음과 같이 원하는 출력이 생성됩니다 .

awk -v MAX=0 '{ if(NR>1 && $3>MAX){WANT1=$1; WANT2=$2; MAX=$3}} END{print WANT1, WANT2}' infile > outfile

답변2

데이터가 설명된 대로 정확하게 형식화되고(특히 세 번째 열, 숫자가 모두 왼쪽 정렬됨) 데이터가 cat파일을 통해 제공된다고 가정하면 다음을 시도해 볼 수 있습니다.

*input generating command* | sort -nrk3 | awk '{print $1 " " $2}' > output_file

데이터가 다른 명령이나 소스에서 제공되는 경우 cat다른 명령으로 변경하세요. 자세한 내용은 다음을 참조하세요.이 게시물기본적으로 귀하의 필요에 맞게 조정합니다.

편집하다:

sort정렬에서는 항상 공백을 구분 기호로 처리하므로 열 3 문자 1부터 시작하라고 말할 필요가 없기 때문에 위 명령을 약간 변경했습니다 . sort한 사용자가 지적했듯이 입력 파일을 직접 제공하는 것도 물론 가능합니다. 헤더도 데이터의 일부인 경우 위 명령을 다음과 같이 변경합니다.

*input generating command* | sort -nrk3 | awk '{if (NR>1) print $1 " " $2}' > output_file

답변3

awk '{if(NF>2 && $3>M){M=$3;print $1,$2} }' file1 | tail -1 > file2

관련 정보