georgegou的个人博客分享 http://blog.sciencenet.cn/u/georgegou

博文

[bash]统计本文字频

已有 1306 次阅读 2021-8-1 14:30 |系统分类:科研笔记

写一个 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://blog.sciencenet.cn/blog-3465931-1297894.html

上一篇:寻找字符串中的最大奇数
下一篇:如何使用MkDocs制作软件或者项目文档
收藏 IP: 58.48.77.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-28 16:16

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部