발생 횟수를 포함하여 CSV 파일의 중복 값을 인쇄합니다.

발생 횟수를 포함하여 CSV 파일의 중복 값을 인쇄합니다.

입력 예는 다음과 같습니다.

John,Yes,123
Tom,No,345
Jason,Yes,567
Thomas,No,123
Jess,No,999
James,Yes,888
Lisa,No,345
Lou,Yes,777
Peter,No,123

세 번째 열에 있는 값의 발생 횟수를 인쇄하고 싶지만 1회 이상 발생한 값만 인쇄하고 싶습니다. 따라서 위의 예에서 원하는 출력은 다음과 같습니다.

3 123
2 345

sed/ 또는 이와 유사한 것으로 이를 어떻게 수행할 수 있나요 awk?

답변1

cut -f3 -d, "$file" | sort | uniq -cd | sed 's/  *//'
  • cut세 번째 필드만 출력하려면 쉼표를 구분 기호로 사용하세요.
  • sortuniq사용할 수 있도록 행 정렬
  • uniq -c-d중복된 행만 출력하도록(즉, 고유한 값을 생략하는) 연속된 중복 행 수를 계산합니다.
  • 마지막은 sed선행 공백을 제거합니다.

답변2

한 줄 awk:

awk -F',' '{c[$3]++} END{for (i in c) {if (c[i]>1) print c[i],i}}' input.csv
  • 이 표시는 필드 구분 기호 awk로 사용됩니다 .,
  • 각 행에 대해 세 번째 필드( )의 값에 대한 카운터를 증가시킵니다 $3.
  • 마지막으로 카운터 배열 c( ) for (i in c)에 등록된 모든 "인덱스"를 반복하고 해당 인덱스와 연관된 "항목"이 1보다 큰 경우 발생 횟수와 세 번째 열의 해당 값을 인쇄합니다.

출력 형식을 더 자세히 제어하려면 블록 printf대신 사용하는 것이 좋습니다 .printEND

관련 정보