题目:

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

解题方法:

awk '{for(n=1;n<=NF;n++){word[$n]++}} END{for(i in word){print i,word[i]}}' words.txt | sort -nr -k2

要看懂上面的解题方法,需要明白的是:

1、awk是个行编辑器,这个相当重要。

2、在awk中,当字符串或者空字符串参与数值运算时,都会被当做0参与运算,比如:

[root@syztoo ~]# awk 'BEGIN{a=""; a=a+1; print a}' test.txt

1

3、在awk中,当引用数组中一个不存在的元素时,awk会自动创建这个元素,并为其赋值为空字符串,比如:

[root@syztoo ~]# awk 'BEGIN{print arr[a]; arr[a]++; print arr[a]}' test.txt

1

# 第一次引用数组不存在的元素,所以赋值为空字符串;第二次将空字符串当做0参于数值运算,所以打印1

4、在awk中,NF表示按分隔符分隔后的列数,$n表示当前行的第n列内容,所以:

for(n=1;n<=NF;n++){word[$n]++}}

# 表示遍历当前行的每一个字段,同时将字段作为word数组的索引,进行存储,并做累加计算

# 比如行内容为:the sunny is is

# 那么经过上面代码处理后,word数组存储的是:word[the]=1,word[sunny]=1,word[is]=2

5、END { } 表示所有行处理完以后,需要执行的代码块,这里:

END{for(i in word){print i,word[i]}}

# 上面代码是打印数组的索引和数组元素,i为索引,word[i]为元素

6、sort命令:

选项:

-n 表示按数值排序,从小到大

-r 表示反转排序顺序

-k 后面跟一个数字,表示按第几列内容进行排序

-t 指定分隔符,不指明-t时,表示默认按一个空格分隔

linux shell 统计词频,SHELL篇 统计词频相关推荐

  1. 统计托福100篇阅读文章中的单词及其词频并且存入excel表格中

    完成这个任务,我们需要掌握以下python的知识点: 1.jieba模块的使用: 2.python中对txt文本文件的操作: 3.python四大容器的使用: 4.openpyxl模块的使用. 代码如 ...

  2. 【Linux系统管理】10 Shell 编程进阶篇

    六 Shell 编程 6.1 正则表达式 6.1.1 概述 还记得我们在上一章说过正则表达式和通配符的区别(正则表达式用来在文件中匹配符合条件的字符串,通配符用来匹配符合条件的文件名)吗?其实这种区别 ...

  3. Linux shell 脚本编程-实战篇(二)

    继: Linux shell 脚本编程-实战篇(一) 2. 创建与数据库.Web及电子邮件相关的脚本 2.1 MySQL 数据库 2.1.1 MySQL 数据库安装 到 http://repo.mys ...

  4. Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向

    ​ 最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! ​ Shell 函数 1. 自定义函数 linux she ...

  5. 【Linux系统管理】10 Shell 基础概念篇

    一 Shell 概述 1.1 什么是 Shell Shell 只要可以实现功能(不考虑效率的情况)即可.Shell 需要对 Linux系统比较熟悉才能使用得当. Shell 编程主要为了帮助运维人员实 ...

  6. python统计词频_Python统计四六级考试的词频

    Python统计四六级考试的词频 此文首发于公众号 「Python知识圈」, 欢迎直接去公众号查看 阅读文本大概需要 4.6 分钟. 今天是教师节,先祝天下所有老师教师节快乐,感谢您在我学生时代对我的 ...

  7. python中文词频排序_python统计词频并排序

    Python 贝叶斯文本分类模型从原理到实现朴素贝叶斯分类器是一种有监督学习, 常见有两种模型, 多项式模型(multinomial model) 即为词频型和伯努利模型(Bernoulli mode ...

  8. Linux shell 脚本编程-实战篇(三)

    继: Linux shell 脚本编程-实战篇(二) 3. 一些小有意思的脚本 3.1 发送消息 3.1.1 功能分析 对于这种简单的脚本,需要的功能不多.涉及的一些命令很常见,下面了解脚本所需的几个 ...

  9. shell scripts 之 代码量统计

    代码统计1 文件only中的内容为多个文件的文件名,code如下: xargs说明: xargs 读入stdin的值, 并默认以空白或者回车作为分隔符,将分割的值作为参数传给后面紧接着的的命令行操作. ...

  10. linux常用shell命令面试,shell经典笔试题目总结

    shell经典笔试题目总结 守望者整理了一些高手的博客记录的shell面试题分享给大家,有些比较有意思,帮助大家面试或则学习shell编程的学习例子 一 文件内容如下: 100 a         1 ...

最新文章

  1. 使用Go语言遇到的“坑”收集
  2. win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧
  3. 项目管理风险控制及注意事项
  4. PAT:1090. Highest Price in Supply Chain (25) AC
  5. latex字体_[LaTeX 引擎] XeLaTeX + macOS,通过字体名调用发行版字体
  6. 【温故知新】CSS学习笔记(选择器)
  7. WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能...
  8. 历史版本_新版本爆料第弹丨英雄练习新去处,荣耀历史秀出来!
  9. 需求分析——使用类图建模
  10. 『雕虫小技』用 Zend Guard 加密 html 页面
  11. 华为、小米和OPPO将采用联发科最新5G SoC天玑720
  12. 把ct图像像素值转化为_CT爱好者的点点滴滴
  13. JSON Server在快速开发过程中的使用
  14. easyui三级联动 html,jQuery使用EasyUi实现三级联动下拉框效果实例分享
  15. oracle em 时区更改不了,Oracle dbtimezone与os时区不一致的解决办法
  16. 侯晓迪:全身心的投入,吃住都在实验室
  17. 正则表达式中问号(?)的用法详解
  18. [APIO2017]考拉的游戏,构造与思维题
  19. 堆叠横向柱状图顶部显示数值和
  20. VC版本号与VS对应关系

热门文章

  1. 学好线性代数,我推荐这本书
  2. linux cp批量复制,【linux】cp 批量复制文件
  3. 基于Android的减肥塑身平台
  4. JavaWeb - 工作窃取算法 Work-Stealing
  5. 弯头lisp_(最全的)管道材料代号说明
  6. 腾讯企业邮箱功能比较
  7. IllegalArgumentException,Mapped Statements collection does not contain value for xxxxx
  8. Online Judge系统大全
  9. 操作系统镜像资源(迅雷、天翼云、百度云)
  10. 2020 EBC徒步功课做好 好好工作心态,Android并发原理解析