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

标签 bash ubuntu command-line

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

    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

关于Bash - 计算文本文件中出现的次数并按降序显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46799700/

相关文章:

ubuntu - 立交桥 API 调度程序失败,地址已在使用 98

php - 从哪里开始使用 CPanel 托管在 PHP 中运行命令行

c - 如何消除同一程序的 gui 和命令行界面之间的区域设置差异?

linux - 内部脚本失败后清理外部 Bash 脚本

linux - 如何格式化我的 grep 输出以在行尾显示行号以及命中数?

bash - 为什么我不能将输出从 sed 重定向到一个文件

linux - CMake 在 Ubuntu 上的错误路径中寻找 Qt 库

linux - gammu-smsd RunOnReceive 脚本结果退出状态 2

windows - 在 Windows 机器上开发,在 Linux (Ubuntu) 上部署

powershell - 仅获取目录名称