友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
公众号的微信号是: 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")