기본적으로 Linux 서버에 큰 텍스트 파일이 있고 처음 6자리만을 기준으로 중복 항목 수를 계산하려고 합니다.
입력하다:
1111110000000222982
112114
1111119292828
11101110
112114
산출:
111111 (2)
112114 (2)
이 상황을 처리하는 가장 좋은 솔루션은 무엇입니까?
답변1
일부 uniq
구현을 사용하면 다음을 수행할 수 있습니다.
$ <file cut -c-6 | sort | uniq -cd
2 111111
2 112114
모든 구현이 결합 -c
(계산) 및 -d
(중복 항목만 출력)을 지원하는 것은 아닙니다.
그렇지 않은 경우에는 uniq -c
파이프를 사용하여 연결 awk '$1 > 1'
하거나모든 것을하다awk
이렇게 하면 정렬 작업이 절약됩니다(그러나 고유 문자열이 많으면 많은 메모리를 사용할 수 있습니다(여기에는 최대 100만 개의 서로 다른 6개 문자열이 있지만 많지는 않습니다).)
답변2
awk '
{a[substr($0,1,6)]++}
END {for (i in a) {if (a[i] > 1) printf "%s (%d)\n", i, a[i]}}
' file
111111 (2)
112114 (2)