Linux 命令实现单词计数功能



hadoop 的 mapreduce 有个入门的程序叫wordcount,相当于其它程序语言的helloworld,是用来统计输入文本中用指定分隔符切割后得到的每个单词的出现次数。

现在来说明在Linux中如何实现这一功能


1. 获取文件每一行的每个单词

这里用awk命令来实现

	awk -F(指定分隔符,默认空格或Tab) '{ for(i=1;i<=NF; i++){ print $i }}' filename

2. 将获得的每个单词进行排序

这里用到sort命令和管道


3. 然后进行去重操作

uniq -c 可以去重并显示出现的次数


例子: 我的文件是 hello.txt

	.......	$ cat hello.txt 
	HELLO WORLD WELCOME MY ZONE
	HELLO HADOOP MY JOB
	HELLO HADOOP 
	HADOOP WORLD 
	MY ZONE 
	HELLO A B C


用命令

	awk '{ for(i=1;i<=NF; i++){ print $i }}' hello.txt | sort | uniq -c



结果

      1 A
      1 B
      1 C
      3 HADOOP
      4 HELLO
      1 JOB
      3 MY
      1 WELCOME
      2 WORLD
      2 ZONE

这样就简单的实现了一个单词计数的功能。


如果想单词在前数字在后,可以再次使用awk命令

	awk '{ for(i=1;i<=NF; i++){ print $i }}' hello.txt | sort | uniq -c | awk '{print $2,$1}'

结果

	A 1
	B 1
	C 1
	HADOOP 3
	HELLO 4
	JOB 1
	MY 3
	WELCOME 1
	WORLD 2
	ZONE 2

当然如果想要输出美观,可以用awk的格式化输出 printf


现在我想统计一下单词出现最多的前三个该怎么办?当然就是按出现次数倒序sort,然后head -3

	awk  '{for(i=1;i<=NF;i++){print $i}}' hello.txt | sort | uniq -c | awk '{print $2,$1}' | sort -t ' ' -k2nr  | head -3


结果

	HELLO 4
	HADOOP 3
	MY 3


至于大文件运行效率如何,我觉得肯定是mapreduce更好。这个统计小文件应该还行。如果有不合理的地方,还请老鸟指正出来,谢谢。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值