苟家宁
[bash]统计本文字频
2021-8-1 14:30
阅读:505

写一个 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 实现吗?


bash 编程是一项非常重要的技能,可以看到许多JD中明确写有熟悉一门脚本语言,shell或者Python,说明脚本语言在平时工作中有重要作用。通常我们需要对文件做复杂的重复性操作时,通过写脚本的方式,可以大大增加工作效率。本质上,shell是用c语言编写的系统软件,通常也称之为命令行工具,用户可以在这个界面通过shell脚本语言来访问linux的内核服务。

针对此题而言,我们可以用Bash脚本处理文本文件,如统计字频等。对于处理日常的文本文件,shell编程能够大大的提高效率,如grep、awk、sed等工具被称为linux文本三剑客。

cat words.txt | tr -s ' ' '\n'|sort|uniq -c |sort -r|awk '{print $2" "$1}'

语句解释:tr -s ’ ’ ‘\n’ 将重复的空格替换为换行 sort 默认按ascii排序 重复的字符串会排在一起 uniq -c 去重 -c 重复次数 sort -r 反向排序 也就是从大到小。得到按频率高低的结果 awk 格式化输出两列



转载本文请联系原作者获取授权,同时请注明本文来自苟家宁科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3465931-1297894.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?