文本中的条目统计 求方法

sh/bash/dash/ksh/zsh等Shell脚本
回复
zeng8809
帖子: 19
注册时间: 2010-07-06 23:58

文本中的条目统计 求方法

#1

帖子 zeng8809 » 2012-03-30 17:43


例如文本a.txt里有这样的内容:
Mary Ma
Luffy Zeng
Zoro Ye
Luffy Zeng
Mary Ma
Luffy Zeng
请问怎么样统计文本中条目,输出以下内容:
Mary Ma:2
Luffy Zeng:3
Zoro Ye:1
请教有什么好方法进行统计??谢谢~~
zeng8809
帖子: 19
注册时间: 2010-07-06 23:58

Re: 文本中的条目统计 求方法

#2

帖子 zeng8809 » 2012-03-30 18:04

求各位路过的大牛回答一下呀...~~~~(>_<)~~~~
谢宝良
帖子: 1983
注册时间: 2010-05-01 21:23

Re: 文本中的条目统计 求方法

#3

帖子 谢宝良 » 2012-03-30 18:07

利用脚本。
用list和set容器,可以做到。
头像
lilydjwg
论坛版主
帖子: 4248
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 文本中的条目统计 求方法

#4

帖子 lilydjwg » 2012-03-30 18:31

代码: 全选

sort | uniq -c
这样就差不多了。或者用 Awk 的数组来计数更好(如果数据非常多的话)。
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 文本中的条目统计 求方法

#5

帖子 aerofox » 2012-03-30 19:08

awk 的例子:

代码: 全选

#!/usr/bin/awk -f
        {
            count[$0]++
        }
END     {
            for (item in count) print item  ":", count[item]
        }
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 文本中的条目统计 求方法

#6

帖子 eexpress » 2012-03-30 19:16

代码: 全选

● xsel -o|perl -e 'while(<>){$a{$_}+=1;};while(($k,$v)=each %a){chomp $k;print "$k=>$v\n"};'
Mary Ma=>2
Luffy Zeng=>1
Zoro Ye=>1
Luffy Zeng=>2
文字处理,没跟perl叫板的。
你那行有啥不对的字符。
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 文本中的条目统计 求方法

#7

帖子 eexpress » 2012-03-30 19:29

代码: 全选

● xsel -o|perl -e 'while(<>){chomp; $a{$_}+=1;};while(($k,$v)=each %a){print "$k=>$v\n"};'
Zoro Ye=>1
Luffy Zeng=>3
Mary Ma=>2
xsel的回车影响了。
● 鸣学
头像
lxr1234
帖子: 721
注册时间: 2009-04-10 11:15
来自: 三民主义国国民权利省我的选择市中共下台镇

Re: 文本中的条目统计 求方法

#8

帖子 lxr1234 » 2012-03-30 20:53

学习了,好贴
强烈反对M$的ARM Secure Boot 锁定要求,大家请签名反对
http://www.fsf.org/campaigns/secure-boo ... cted-boot/
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: 文本中的条目统计 求方法

#9

帖子 Think1st » 2012-03-30 21:12

lilydjwg 写了:

代码: 全选

sort | uniq -c
这样就差不多了。或者用 Awk 的数组来计数更好(如果数据非常多的话)。
这个就差不多了。
在这里,问题比答案更抢手。
头像
mjp123
帖子: 702
注册时间: 2009-04-09 15:06

Re: 文本中的条目统计 求方法

#10

帖子 mjp123 » 2012-03-30 23:00

aerofox 写了:awk 的例子:

代码: 全选

#!/usr/bin/awk -f
        {
            count[$0]++
        }
END     {
            for (item in count) print item  ":", count[item]
        }
这个优雅。
回复