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

时间:2017-10-17 21:43:41

标签: bash ubuntu command-line

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以将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

答案 1 :(得分:0)

首先使用grep提取单词:

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