如何用Bash统计文本文件单词出现次数?解决脚本无计数问题
词频统计脚本修正方案
你的脚本问题出在uniq命令缺少-c参数——这个参数是让uniq输出每行的重复计数,不加的话只会去重,不会统计次数。
修正后的完整命令
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr | awk '{print $2 " " $1}'
各步骤说明
cat words.txt:读取目标文本文件内容tr -s ' ' '\n':将所有空格替换为换行,同时压缩连续空格为单个换行,确保每个单词单独占一行sort:对单词排序,让相同单词连续排列,为后续计数做准备uniq -c:统计连续重复行的出现次数,输出格式为「次数 单词」sort -nr:按次数从大到小排序(-n表示按数值排序,-r表示倒序)awk '{print $2 " " $1}':调换输出的「次数 单词」顺序,转为你需要的「单词 次数」格式
测试验证:当文件内容为test test test时,执行该命令会输出test 3,完全符合预期。
更简洁的替代写法
如果想减少管道操作,也可以用awk直接完成统计,再排序:
awk '{for(i=1;i<=NF;i++) count[$i]++} END{for(w in count) print w, count[w]}' words.txt | sort -nr
这个命令通过awk内部数组统计每个单词的出现次数,最后遍历数组输出结果,再按次数倒序排序,效果和上面的命令一致。
内容的提问来源于stack exchange,提问作者MakeStackOverflowGreatAgain
相关产品推荐
相关产品推荐

