데이터 파일이 있는데 그 중 일부는 다음과 같습니다.
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
배열이나 해시와 달리 perl
Miller는나타나다키의 "가시성 순서"를 유지하지만 이것이 보장되는지는 모르겠습니다.