일치하는 ID가 있는 열의 최대값

일치하는 ID가 있는 열의 최대값

다음 필드가 포함된 파일이 있습니다.

NM001 rp1 210
NM003 rp1 220
NM005 rag 200
NM004 rag 100

열 2의 각 변경 사항에 대해 열 4에서 최대값을 찾고 해당 열 1도 보고하는 출력을 갖고 싶습니다. 지금까지 열 2와 3은 보고하지만 열 1의 숫자가 다르기 때문에 열 1은 보고하지 않는 솔루션을 찾았습니다. 나는 awk를 사용하는 것을 좋아합니다.

출력은

NM003 rp1 220
NM005 rag 200

답변1

awk를 사용하면 쉽습니다.

두 번째 열에 있는 각 값의 최대값을 추적해야 하며, 또한 각 전체 행을 최대값으로 유지하려고 합니다.

awk '
    $3 > maxvals[$2] {lines[$2]=$0; maxvals[$2]=$3}
    END { for (tag in lines) print lines[tag] }
'

출력은 정렬되지 않았으므로 sort특정 순서가 필요한 경우 입력을 파이프하십시오.

답변2

sort다음 도구를 사용해 보세요 uniq.

sort -k3,3nr infile |
awk '{ print $1" " $3" " $2 }' | 
uniq -f2 | awk '{ print $1" " $3" " $2 }' > outfile

관련 정보