입력 예는 다음과 같습니다.
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
세 번째 필드만 출력하려면 쉼표를 구분 기호로 사용하세요.sort
uniq
사용할 수 있도록 행 정렬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
대신 사용하는 것이 좋습니다 .print
END