统计大数据中的单词词频

之前的信息安全大赛有一道题叫bigdata,这道题给的文件中一共有5000多万个单词,需要找出文件中出现次数最多的单词和出现次数最少的单词。

500MB的TXT文件,感觉windows力不从心,于是想到了linux,linux强大的SHELL我相信能解决一切问题。


开始动手

打开文件后会发现,这个文件每行有若干个单词,单词之间用空格或者是tab隔开,但shell里sort和uniq都是一次处理一行字符串的,所以首先需要将该文件转换成一行一个单词的文件,我用的是tr命令。(可以用管道一次完成,但是为了清晰我一条一条分开讲)

因为在linux中tab和空格不一样,所以需要替换两次。假设文件名为text,命令如下:

cat text|tr " " "\n"|tr "\t" "\n"
这句命令的意思是,cat命令打开text文件,然后tr命令搜索空格,然后全部替换为回车;然后在替换完的文件中再搜索tab,然后将所有的tab替换成回车。

这样操作完后这个文件就变成一行一个单词的格式了,接下来我们来排序。


排序的思路就是先用sort按顺序排好,在用uniq去掉重复行,并且显示该行出现的次数,最后再用sort排一次序,最终输出需要的结果,命令如下:

cat text|tr " " "\n"|tr "\t" "\n"|sort|uniq -c|sort|tail -5
这句命令的意思是,先将空格和tab替换,就是上面所说的,然后用sort按字母顺序排序,然后用uniq命令去除重复的行,也就是重复的单词,并且显示每个单词出现的次数;然后再用sort排序,默认是按升序,如果要逆序后面加一个-r;排序后因为我不需要看到全部的结果,几万个单词全都显示会很慢而且屏幕显示不下,于是我加了tail -2。这句的意思是只显示结果中最后面的5行。如果需要最少出现的单词只需要改成head -5就行了,意思是显示结果中最前面的5行。


大致的思路和过程就是这样,当然还有很多种方法,个人认为shell命令较简单,于是就采用的这个方法。

如果有错误请大牛指出,谢谢~









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值