열의 고유한 내림차순

열의 고유한 내림차순

주어진 데이터에서 각 지역을 고유하게 정렬하고 상위 조회수만 인쇄할 수 있습니까?

주어진 데이터

aza1 18
bcn1 16
sat2 12
lcy2 12
fra1 12
aza1 12
bcn1 10
sat2 8
lcy2 9
fra1 13
aza1 21
bcn1 2
sat2 10
lcy2 0
fra1 1

원하는 출력

aza1 21
bcn1 16
sat2 12
lcy2 12
fra1 13

답변1

순서가 중요한 경우 해결책은 다음을 사용하는 것입니다.유형그리고고유한

<INPUT_FILE sort -k 1,1 -k 2nr,2 | uniq -w4

산출:

aza1 21
bcn1 16
fra1 13
lcy2 12
sat2 12

매개변수 정렬:

-k: 키 기준 정렬(이 경우 열, -t와 쌍을 이룸)

-n: 숫자순으로 정렬

-r: 역순

(선택) -t: 키 구분 기호를 변경하려는 경우(기본값: 공백)

유일한 매개변수:

-w: 처음 N 문자 선택

설명하다:

귀하의 질문에서는 첫 번째 열을 먼저 정렬한 다음 두 번째 열을 정렬해야 합니다. 그래서 거기에-k 1,1이어서-k 2,2. 그러나 두 번째 열쇠(오직)숫자를 역순으로 정렬해야 합니다. 그러므로-k 2nr,2.

-n 또는 -r 정렬 매개변수가 -k 매개변수 외부에 있는 경우 특정 키가 아닌 전체 입력에 적용됩니다.

마지막으로 유일한 행을 찾아야 하는데 처음 4개 문자만 일치합니다. 그러므로,유니클로-w 4

답변2

순서가 중요하지 않은 경우:

<infile sort -rnk2,2  |sort -uk1,1

-rey 열 번호( )에 숫자를 사용한 -n다음 첫 번째 ey 열( )에 있는 행을 유지하고 레이블을 지정합니다.sort-k2sort -rnk2,2-u-ksort -uk1,1

또는 다음과 같습니다 awk:

<infile awk '
            { arr[$1]= (arr[$1]<$2)? $2 : arr[$1] }
         END{ for (x in arr) print x, arr[x] }'

관련 정보