특정 ID의 최대값으로 행 필터링

특정 ID의 최대값으로 행 필터링

첫 번째 열에 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

관련 정보