다음과 비슷한 파일이 있다고 가정하십시오.
123
123
234
234
123
345
'123'이 여러 번 복제되었는지, '234'가 여러 번 복제되었는지 등을 찾고 싶습니다. 이상적으로 출력은 다음과 같습니다.
123 3
234 2
345 1
다음과 비슷한 파일이 있다고 가정하십시오.
123
123
234
234
123
345
'123'이 여러 번 복제되었는지, '234'가 여러 번 복제되었는지 등을 찾고 싶습니다. 이상적으로 출력은 다음과 같습니다.
123 3
234 2
345 1
답변:
한 줄에 하나의 숫자가 있다고 가정합니다.
sort <file> | uniq -c
--count
예를 들어 Linux에서 GNU 버전과 함께 더 자세한 플래그를 사용할 수도 있습니다 .
sort <file> | uniq --count
sort
과 같이 다시 사용할 수 있습니다 .sort <file> | uniq -c | sort -n
이것은 것이다 중복 라인만을 인쇄 건의를 :
sort FILE | uniq -cd
또는 GNU 긴 옵션 (Linux의 경우) :
sort FILE | uniq --count --repeated
에 BSD와 OSX 당신은 그렙 사용해야하는 독특한 라인 필터링 :
sort FILE | uniq -c | grep -v '^ *1 '
주어진 예에서 결과는 다음과 같습니다.
3 123
2 234
한 번만 나타나는 줄을 포함하여 모든 줄의 개수 를 인쇄 하려면 다음을 수행하십시오.
sort FILE | uniq -c
또는 GNU 긴 옵션 (Linux의 경우) :
sort FILE | uniq --count
주어진 입력에 대한 출력은 다음과 같습니다.
3 123
2 234
1 345
가장 빈번한 줄로 출력 을 정렬하려면 다음을 수행하여 모든 결과를 얻을 수 있습니다.
sort FILE | uniq -c | sort -nr
또는 중복 행만 얻으려면 가장 자주 시작하십시오.
sort FILE | uniq -cd | sort -nr
OSX와 BSD에서 마지막 것은 다음과 같습니다.
sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
| sort -n
또는 | sort -nr
파이프에 추가하면 반복 횟수 (오름차순 또는 내림차순)별로 출력이 정렬됩니다. 이것은 당신이 요구하는 것이 아니지만 도움이 될 것이라고 생각했습니다.
| awk '$1>100'
sort FILE | uniq -c | grep -v '^ *1 '
통하다 어 wk:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
에서 awk 'dups[$1]++'
명령 변수는 $1
컬럼 1의 전체 내용을 보유하고 대괄호 배열 액세스한다. 따라서 data
파일 의 첫 번째 행 열마다 이름 dups
이 지정된 배열의 노드 가 증가합니다.
마지막 으로 변수로 dups
배열을 반복 num
하고 저장된 숫자를 먼저 인쇄 한 다음 중복 값의 수를로 인쇄합니다 dups[num]
.
입력 파일에는 일부 줄의 끝에 공백이 있습니다.이를 지우면 $0
위의 $1
명령 대신 사용할 수 있습니다 . :)
uniq
아닙니까?
sort | uniq
awk 솔루션은 성능과 리소스 균형이 상당히 다릅니다. 파일이 크고 다른 줄 수가 적 으면 awk 솔루션이 훨씬 더 효율적입니다. 라인 수는 선형이며 공간 사용량은 다른 라인 수는 선형입니다. OTOH, awk 솔루션은 모든 다른 줄을 메모리에 보관해야하며 (GNU) 정렬은 임시 파일에 의존 할 수 있습니다.
"Windows PowerShell" 을 사용하는 Windows에서는 아래에서 언급 한 명령을 사용하여이 작업을 수행했습니다.
Get-Content .\file.txt | Group-Object | Select Name, Count
또한 where-object Cmdlet을 사용하여 결과를 필터링 할 수 있습니다
Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count