【问题标题】:Bash - Count number of occurences in textfile and display in descending orderBash - 计算文本文件中出现的次数并按降序显示
【发布时间】:2017-10-17 21:43:40
【问题描述】:

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

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

除了包含逗号、句号、!和连字符。

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

【问题讨论】:

  • 使用tr -d删除特殊字符。

标签: bash ubuntu command-line


【解决方案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

【讨论】:

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

先用grep提取单词怎么样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多