Bash - 计算文本文件中的出现次数并按降序显示



我想计算文本文件中相同单词的数量并按降序显示它们。到目前为止,我有:

    cat sample.txt | tr ' ' 'n' | sort | uniq -c | sort -nr 

这主要给了我令人满意的输出,除了它包含逗号、句号、! 和连字符等特殊字符的事实。

如何修改现有命令以不包含上述特殊字符?

您可以将

tr与要删除的字母的复合字符串一起使用。

例:

$ echo "abc, def. ghi! boss-man" | tr -d ',.!'
abc def ghi boss-man

或者,使用 POSIX 字符类,知道例如boss-man会变得bossman

$ echo "abc, def. ghi! boss-man" | tr -d [:punct:]
abc def ghi bossman

旁注:通过使用awk,您可以获得更多控制和速度:

$ echo "one two one! one. oneone
two two three two-one    three" | 
 awk 'BEGIN{RS="[^[:alpha:]]"} 
     /[[:alpha:]]/ {seen[$1]++} 
     END{for (e in seen) print seen[e], e}' | 
 sort -k1,1nr -k2,2
4 one
4 two
2 three
1 oneone

首先用grep提取单词怎么样:

grep -o "w+" sample.txt | sort | uniq -c | sort -nr 

最新更新