일치하는 중복 조건을 기반으로 중복 행 수 찾기

일치하는 중복 조건을 기반으로 중복 행 수 찾기

기본적으로 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)

관련 정보