두 번째 열에서 국가별로 그룹화한 다음 결과 합계를 기준으로 정렬하려면 어떻게 해야 합니까?

두 번째 열에서 국가별로 그룹화한 다음 결과 합계를 기준으로 정렬하려면 어떻게 해야 합니까?

다음과 같은 파일이 있습니다.

1   UA
2   GB
3   UA
3   UA
2   US
1   UA
4   US 

두 번째 열로 그룹화하고 첫 번째 열로 합계를 계산하는 방법은 무엇입니까? 따라서 출력은 다음과 같아야 합니다.

8 UA  
6 US
2 GB

답변1

그리고 GNU awk:

$ awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}
       {a[$2]+=$1} END{for(k in a) print a[k], k}' ip.txt
8 UA
6 US
2 GB

바라보다gawk 매뉴얼: 미리 정의된 배열 스캔 순서 사용정렬 옵션에 대해 자세히 알아보세요.


그리고 perl:

perl -lane '$h{$F[1]}+=$F[0]; END{print "$h{$_} $_" for
            sort {$h{$b} <=> $h{$a}} keys %h}' ip.txt

답변2

GNU 사용 datamash:

$ datamash -W -s -g 2 sum 1 <file
GB      2
UA      8
US      6

공백을 필드 구분 기호로 처리하고, 두 번째 필드의 입력을 정렬하고, 이 필드에서 그룹화하고, 각 그룹의 첫 번째 필드를 합산합니다.

awk '{ print $2, $1 }'열을 교환하고( datamash항상 출력에서 ​​그룹화된 열을 먼저 작성) sort -nr예제와 같이 출력을 내림차순으로 정렬하려면 출력을 파이프하십시오.

$ datamash -W -s -g 2 sum 1 <file | awk '{ print $2, $1 }' | sort -nr
8 UA
6 US
2 GB

요약 하자면 awk:

$ awk '{ sum[$2] += $1 } END { for (i in sum) print sum[i], i }' file
8 UA
2 GB
6 US

sort -nr위와 같이 정렬하려면 전달하세요.

관련 정보