2개 열 내에서 고유한 행 수 계산

2개 열 내에서 고유한 행 수 계산

데이터 파일이 있는데 그 중 일부는 다음과 같습니다.

4 1
5 2
1 2
3 1
1 1
1 2
1 1
1 1
2 1
2 1

비슷한 행의 개수를 계산하고 다음과 같이 세 번째 열에 개수를 입력하고 싶습니다.

    4 1 1
    5 2 1
    1 2 2
    3 1 1
    1 1 3
    2 1 2

어떤 제안이 있으십니까?

답변1

이것은 한 가지 방법입니다. 파일을 정렬한 다음 get count 를 사용한 uniq -c다음 awk필드 순서 뒤집기를 사용합니다.

$ sort file.txt | uniq -c | awk '{ print $2,$3,$1 }'
1 1 3
1 2 2
2 1 2
3 1 1
4 1 1
5 2 1
$

두 번째 방법은 pure 를 사용하는 것입니다 awk.

$ awk '{ x[$0]++ } END { for(a in x) { print a,x[a] } }' file.txt
1 1 3
1 2 2
4 1 1
2 1 2
5 2 1
3 1 1
$

세 번째 방법인 perl.은 약간 구식/장황하므로 누군가가 좀 더 우아한 방법을 보여줄 때까지 기다리십시오.

$ perl -nle '$a{$_}++;END{for(keys %a) { print $_," ",$a{$_} } }' <file.txt
3 1 1
1 2 2
5 2 1
1 1 3
2 1 2
4 1 1
$

답변2

사용밀러:

$ mlr --nidx uniq -g 1,2 -c file
4 1 1
5 2 1
1 2 2
3 1 1
1 1 3
2 1 2

또는 동등하게

mlr --nidx count-distinct -f 1,2 file

awk배열이나 해시와 달리 perlMiller는나타나다키의 "가시성 순서"를 유지하지만 이것이 보장되는지는 모르겠습니다.

관련 정보