![특정 ID의 최대값으로 행 필터링](https://linux55.com/image/100369/%ED%8A%B9%EC%A0%95%20ID%EC%9D%98%20%EC%B5%9C%EB%8C%80%EA%B0%92%EC%9C%BC%EB%A1%9C%20%ED%96%89%20%ED%95%84%ED%84%B0%EB%A7%81.png)
첫 번째 열에 ID가 있고 두 번째 열에 숫자 값이 있는 테이블 파일이 있습니다. 각 ID의 점수가 가장 높은 행만 포함하는 파일을 생성해야 합니다.
그래서 나는 이것을 취하고 싶습니다 :
ES.001 2.33
ES.001 1.39
ES.001 119.55
ES.001 14.55
ES.073 0.35
ES.073 17.95
ES.140 1.14
ES.140 53.88
ES.140 18.28
ES.178 150.27
그리고 이것을 생성합니다:
ES.001 119.55
ES.073 17.95
ES.140 53.88
ES.178 150.27
Bash 명령줄에서 이 작업을 수행할 수 있는 방법이 있나요?
답변1
sort
숫자 내림차순으로 첫 번째 필드를 기준으로 정렬한 다음 두 번째 필드를 기준으로 정렬하는 데 사용됩니다 . 각각의 고유한 첫 번째 필드 값의 첫 번째 줄만 인쇄하려면 Awk를 사용하세요.
sort -k1,1 -k2rn inputfile | awk '!a[$1]++'
답변2
데이터 유형에 따라 정렬하는 데 시간이 오래 걸릴 수 있습니다. 다음과 같이 정렬하지 않고(더 많은 메모리를 사용하여) 결과를 얻습니다.
awk 'a[$1]<$2{a[$1]=$2}END{for(i in a){print(i,a[i])}}' infile