![다양한 필드 및 값을 기준으로 정렬](https://linux55.com/image/121350/%EB%8B%A4%EC%96%91%ED%95%9C%20%ED%95%84%EB%93%9C%20%EB%B0%8F%20%EA%B0%92%EC%9D%84%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%EC%A0%95%EB%A0%AC.png)
나는 다음과 같은 데이터를 가지고 있습니다 :
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