다양한 필드 및 값을 기준으로 정렬

다양한 필드 및 값을 기준으로 정렬

나는 다음과 같은 데이터를 가지고 있습니다 :

AD12      Ar.1       352
AD12      Ar.7       495
AD12      Ar.8       491
AD12      Ar.6       495
AD12      Ar.5       495
AD12      Ar.9       491
AD13      Ar2.1      495

첫 번째 열의 고유 ID에 대해 세 번째 열을 기반으로 가장 높은 값을 가진 행을 선택하고 싶지만 첫 번째 열의 각 ID에 대해 가장 높은 값을 가진 중복 항목을 유지하고 싶습니다. 예를 들면 다음과 같습니다.

AD12      Ar.7       495
AD12      Ar.6       495
AD12      Ar.5       495
AD13      Ar2.1      495

무엇을 해야할지 모르겠습니다. sort -r -k3,3 -k1,1과 같은 다른 정렬 명령을 시도했지만 작동하지 않았습니다. 어떤 제안이 있으십니까?

답변1

sort+awk해결책:

sort -k1,1 -k3,3nr <file | awk '!a[$1]{ a[$1]=$3 }$3==a[$1]'
  • sort -k1,1 -k3,3nr- 첫 번째 필드(일반 정렬) 및 세 번째 필드(숫자 역순)를 기준으로 행을 정렬합니다.

  • !a[$1]{ a[$1]=$3 }$3==a[$1]- 각 고유에 대해ID $1현재 레코드의 최대값이 동일한지 확인$3


산출:

AD12      Ar.5       495
AD12      Ar.6       495
AD12      Ar.7       495
AD13      Ar2.1      495

관련 정보