파일의 각 단어 수를 찾는 방법은 무엇입니까?
텍스트 파이프라인이나 문서의 각 단어에 대한 히스토그램을 원합니다. 문서에 새로운 줄과 빈 줄이 생길 것입니다. 나는 내 몸을 제외하고 모든 것을 벗겼다 [a-zA-Z]
.
> cat doc.txt
word second third
word really
> cat doc.txt | ... # then count occurrences of each word \
# and print in descending order separated by delimiter
word 2
really 1
second 1
third 1
파일이 1GB의 텍스트이고 기하급수적인 시간 로드를 처리할 수 없으므로 다소 효율적이어야 합니다.
답변1
이 시도:
grep -o '\w*' doc.txt | sort | uniq -c | sort -nr
-o
일치하는 줄 대신 각 일치 항목을 인쇄합니다.\w*
단어 문자 일치sort
파이프로 연결하기 전에 일치 항목을 정렬하세요uniq
.uniq -c
고유한 줄과 발생 횟수를 인쇄합니다.-c
sort -nr
발생 횟수를 기준으로 역순으로 정렬합니다.
산출:
2 word
1 third
1 second
1 really
선택하다:
awk
정확한 출력을 위해 :
$ grep -o '\w*' doc.txt \
| awk '{seen[$0]++} END{for(s in seen){print s,seen[s]}}' \
| sort -k2r
word 2
really 1
second 1
third 1
답변2
perl -lnE '
$count{$_}++ for /[[:alpha:]]+/g;
END {
say "@$_" for
sort {$b->[1] <=> $a->[1] || $a->[0] cmp $b->[0]}
map {[$_, $count{$_}]}
keys %count
}
' doc.txt
이는 pLumo의 초기 솔루션보다 더 많은 메모리를 소비합니다.