첫 번째 쉼표 앞의 일치 항목을 기준으로 중복 행 찾기

첫 번째 쉼표 앞의 일치 항목을 기준으로 중복 행 찾기

다음 데이터에서 첫 번째 쉼표 앞의 숫자를 기반으로 중복 행을 찾는 방법은 무엇입니까?

입력하다:

112112112,00,00,00
110110,01,01,02
112112112,11,11,888
110110,99,88,8
410410,22,22,22

산출:

112112112 (2)
110110    (2)

답변1

수정할 수는 있지만스틸 드라이버 솔루션이전의 유사한 질문에 대한 빠르고 더러운 파이프라인은 다음과 같습니다.

cut -d, -f1 < input | sort | uniq -c | awk '$1 > 1 { print $2, "(" $1 ")" }'

답변2

싱글로awk:

awk -F, '{ a[$1]++ }END{ for(i in a) if(a[i]>1) printf "%-12s(%d)\n",i,a[i] }' file

산출:

110110      (2)
112112112   (2)

답변3

입력 파일을 다음으로 파이프하면 트릭이 수행됩니다.

cut -f1 -d, | sort | uniq -cd

출력은 게시한 것과 정확히 일치하지 않습니다. 중복 개수는 괄호가 있는 마지막 열이 아닌 첫 번째 열입니다.

  2 110110
  2 112112112

호출을 수행하려면 cut첫 번째 쉼표로 구분된 필드를 분리하여 sort동일한 필드가 순서대로 uniq정렬되어 있는지 확인해야 합니다. 이를 위해서는 이러한 필드를 -c계산하고 -d중복 항목만 표시해야 합니다. 전체 입력을 정렬하는 것은 원하는 것을 달성하는 가장 효율적인 방법이 아닐 수 있지만 입력이 매우 큰 경우에만 문제가 됩니다.

관련 정보