如何查找文件中每个单词的计数?
我想要文本管道或文档中每个单词的直方图。文档中将存在新行和空行。我把除了 之外的所有东西都脱光了[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 的初始解决方案消耗更多的内存。