友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

192. 统计词频

写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。

为了简单起见,你可以假设:

  • words.txt 只包括小写字母和 ` ` 。

  • 每个单词只由小写字母组成。

  • 单词间由一个或多个空格字符分隔。

示例:

假设 words.txt 内容如下:

the day is sunny the the
the sunny is is

你的脚本应当输出(以词频降序排列):

the 4
is 3
sunny 2
day 1

说明:

  • 不要担心词频相同的单词的排序问题,每个单词出现的频率都是唯一的。

  • 你可以使用一行 Unix pipes 实现吗?

思路分析

  • 一刷

1
2
3
4
5
6
7
8
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr | awk '{print $2, $1}'

# cat words.txt:读取文件内容
# tr -s ' ' '\n':将空格替换为换行符(-s选项压缩连续空格),使每个单词单独成行
# sort:对单词进行排序(uniq命令需要排序后的输入)
# uniq -c:统计重复行数量(输出格式:"4 the")
# sort -nr:按数值降序排序(-n数值排序,-r降序)
# awk '{print $2, $1}':反转输出列顺序(从"4 the"变为"the 4")

参考资料