파일에 각 줄이 몇 번 나타나는지 계산


23

내가 포함하는 파일이 있다고 가정 해보십시오.

A
A
A
B
CC

다음과 같은 출력을 원합니다.

A 3
B 1
CC 1

답변:


23

나는 그것을 알아; "발생 횟수에 따른 접두사 행"에 대한 uniq옵션 중 하나는 -c다음과 같습니다.

$ uniq -c

1
숫자를 먼저 입력하십시오. 주문에 대해 까다로운 경우 다음을 수행 할 수 있습니다.uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous

12
또한 인접한 반복 선 만 계산합니다. 일반적인 관용구는sort | uniq
Steven D

4
uniq은 또한 카운트를 데이텀 앞에 둡니다. 원래 질문은 실제로 다음과 같은 것이 필요합니다. sort filename | uniq -c | awk '{print $ 2, $ 1}'
Bruce Ediger

위의 의견에서 명확하지 않은 경우 목표를 달성하기 위해 데이터를 먼저 정렬 해야합니다 . 정렬되지 않은 경우 반복 항목이 있습니다. 예를 들어, 원본 파일이 대신 이었다면 A \ A \ A \ B \ A \ CC출력 결과 uniq -c는 show A 3and later show A 1입니다. 먼저 정렬하면 모든 동일한 행이 함께 그룹화됩니다.
drootang

16

방금 비슷한 문제가 발생했습니다. 이것으로부터, 나는 조금 더 진보 된 명령을 만들었습니다. 다른 사람들에게 유용하기를 바랍니다.

위의 주석에서 Steven D가 말했듯이 uniq인접한 반복 줄만 계산하므로 먼저 줄을 정렬해야합니다. 그런 다음 고유 한 줄을 찾은 다음 다시 정렬하여 가장 많이 발생하는 줄을 맨 위에 놓습니다.

sort file.txt | uniq -c | sort -nr > output.txt

출력이 파일로 리디렉션됩니다 output.txt. 명령 행에서 결과를 sort -n보고자하는 경우, 가장 일반적인 행이 맨 아래에 있도록 (예 : 화면에 계속 표시되도록) 리디렉션을 제거하고 마지막 명령을 변경하십시오 .


4
당신은 cat file.txt | sort그냥로 대체 할 수 있습니다 sort file.txt. :)
mattdm

1
@ mattdm : 그 공식의 단점은 cat더 흥미로운 것을 빨리 바꿀 수 없다는 것입니다. 아시다시피 cat.
SamB

1
@SamB 그런 다음로 작성하십시오 < file.txt sort | uniq -c. 이것은 편집하기 쉽고 여전히 불필요한 것을 피합니다 cat.
hvd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.