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