统计词频

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

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

words.txt只包括小写字母和 ' '
每个单词只由小写字母组成。
单词间由一个或多个空格字符分隔。

链接:https://leetcode-cn.com/problems/word-frequency

cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{print $2,$1}'
指令解释
cat连接当前文件,并在标准输出上输出
tr替换、缩减或删除标准输入中字符,并写入到标准输出
sort对文本文件的行进行排序,将排序好的文件输出到标准输出上
uniq从 INPUT (或 标准输入) 数据 中 忽略 (但是 保留 一行) 连续的 相似行, 结果 送入 OUTPUT (或 标准输出).
awk报告生成器,它拥有强大的文本格式化的能力

cat:cat options 文件

-A	每行结束,输出$
-b	给非空行输出编号
-e	每行结束,输出$
-E	每行结束,输出$
-n	给所有输出行编号
-s	将所有的连续的多个空行替换为一个空行

tr:tr options SET1 SET2

-c -C	使用SET1补全,SET2替换
-d	删除SET1中的内容,并不做替换,则SET2不需要
-s	连续重复的SET1字符,在替换时,会被替换为一个SET2字符
-t	将SET1截断为SET2的长度,并用SET2替换

sort:sort options 文件

-b	忽略排序字段或关键字中开头的空格
-c	检查指定文件是否排序好了,不会排序(会输出是否有序无序)
-d	只考虑[a-zA-Z0-9]字符
-f	将小写字母当成大写字母排序
-g	按照通常数值顺序作比较,暗含-b
-i	只考虑[\040-\0176]字符
-k pos1		排序从pos1位置开始
//-l	按照当前环境排序
-m	合并已排好的文件,不排序
-n	按照字符串的数值顺序比较
-o FILE	将排序结果写入到文件,而不是标准输出中
-r	颠倒比较结果
-s	屏蔽最后的再分类比较来稳定排序
-t SEP	使用SEP字符来替代空格的转换non-
-T DIRECTORY	使用DIRECTORY作为临时文件,而不是$TMPDIR或者/tmp
-u	如果有-c,则按严格的顺序进行检查; 如果有-m,则只输出相等顺序的第一个.
-z	以0字节结束行,而不是使用换行符,这是为了找到-print0

uniq:uniq options input ouput

-c	首行显示出现的数量
-d	仅显示重复行(重复的只显示一次)
-D	显示全部重复行(重复的都显示)
-f	不比较,起初的N栏
-i	比较时,忽略大小写
-s	不比较 起初的N个字符
-u	仅显示无重复行
-w	每行中,比较不超过N个字符
-N	同 -f N
+N	同 -s N

awk:

1、首先cat命令查看words.txt
2、tr -s ’ ’ '\n’将空格都替换为换行 实现分词
3、sort排序 将分好的词按照顺序排序
4、uniq -c 统计重复次数(此步骤与上一步息息相关,-c原理是字符串相同则加一,如果不进行先排序的话将无法统计数目)
5、sort -r 将数目倒序排列
6、awk ‘{print $2,$1}’ 将词频和词语调换位置打印出来

作者:money666
链接:https://leetcode-cn.com/problems/word-frequency/solution/yi-bu-yi-bu-ji-suan-ci-pin-by-money666/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值