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

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

Unix에서는 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

관련 정보