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

Bash-统计文本文件中出现的次数并按降序显示,bash,ubuntu,command-line,Bash,Ubuntu,Command Line,我想计算文本文件中相同单词的数量,并按降序显示它们。 到目前为止,我已经: cat sample.txt | tr ' ' '\n' | sort | uniq -c | sort -nr 除了它包含逗号、句号等特殊字符外,它给了我令人满意的输出!和连字符 如何修改现有命令,使其不包含上述特殊字符?如何首先使用grep提取单词: grep -o "\w\+" sample.txt | sort | uniq -c | sort -nr 您可以将tr与要删除的字母组合字符串一起使用

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

    cat sample.txt | tr ' ' '\n' | sort | uniq -c | sort -nr 
除了它包含逗号、句号等特殊字符外,它给了我令人满意的输出!和连字符


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

如何首先使用
grep
提取单词:

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

您可以将
tr
与要删除的字母组合字符串一起使用

例如:

$ echo "abc, def. ghi! boss-man" | tr -d ',.!'
abc def ghi boss-man
或者,使用POSIX字符类,例如知道
bossman
将成为
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

使用
tr-d
删除特殊字符。我喜欢使用tr-d[:punct:]的解决方案。谢谢。我得到了我想要的输出,但是当我运行命令时,连字符仍然被算作不可见字段?假设我在命令行中出现了8个土豆5个土豆3(它计算连字符,但您看不到)