주어진 데이터에서 각 지역을 고유하게 정렬하고 상위 조회수만 인쇄할 수 있습니까?
주어진 데이터
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
-r
ey 열 번호( )에 숫자를 사용한 -n
다음 첫 번째 ey 열( )에 있는 행을 유지하고 레이블을 지정합니다.sort
-k
2
sort -rnk2,2
-u
-k
sort -uk1,1
또는 다음과 같습니다 awk
:
<infile awk '
{ arr[$1]= (arr[$1]<$2)? $2 : arr[$1] }
END{ for (x in arr) print x, arr[x] }'