유닉스에서는 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