2009年5月10日星期日

[PerlChina] Re: 请教合并一文件中域1相同的记录,域2进行累加

求问一般使用的字处理模块。能完成awk功能的。

2009/5/10 purl lamp <lamp.purl@gmail.com>:
> Data::Dump 这个模块也不错,感觉做 one-liner 更好一些
> perl -MData::Dump=pp -e "print pp \%ENV"
> 另外这个模块的依赖也很小,主要是 MIME::Base64 Scalar::Util 这样一些基础模块,所以安装也很方便。
> 这从 http://www.twitter.com/perloneliner 学来的。
>
> 2009/5/10 Don Qin <icefishc@gmail.com>
>>
>> 这只是在那map当循环用。
>> 不太合适。
>>
>> 2009/5/9 Anthony WU <anthonywuy2k@gmail.com>
>>>
>>> 看來用map的人比較少
>>> map ((/^(\d+)\|(\d+)$/, $hash{$1}+= $2), <>);
>>> map (printf ("%d|%d\n", $_, $hash{$_}), keys (%hash));
>>>
>>> -------- Original Message  --------
>>> Subject: [PerlChina] Re: 请教合并一文件中域1相同的记录,域2进行累加
>>> From: Jacky Xu <x2x4com@gmail.com>
>>> To: perlchina@googlegroups.com
>>> Date: 9/5/2009 18:06
>>>
>>> 貌似浪费判断了,忘记undef可以在适合的时候自动转换成0了。
>>>
>>> 在 2009-05-09六的 18:02 +0800,Jacky Xu写道:
>>>
>>>
>>> 1|2
>>> 1|3
>>> 2|3
>>> 3|3
>>> 4|3
>>> 4|4
>>> 1000000|1
>>>
>>> use Data::Dumper;
>>>
>>> my (%data,$key,$value);
>>> open F, "<20090508data";
>>> while (<F>) {
>>> chomp;
>>> ($key,$value) = split /\|/;
>>> if ( defined $data{$key} ) {
>>> $data{$key} += $value;
>>> } else {
>>> $data{$key} = $value;
>>> }
>>> }
>>>
>>> print Dumper \%data ;
>>>
>>>
>>>
>>>
>>>
>>> 在 2009-05-08五的 21:13 +0800,li写道:
>>>
>>>
>>> 先说一句,我不是来砸场子的^_^因为只会awk
>>>
>>>
>>> cat 20090508data
>>> 1|2
>>> 1|3
>>> 2|3
>>> 3|3
>>> 4|3
>>> 4|4
>>> 1000000|1
>>>
>>> cat analysis20090508data
>>> #!/bin/awk -f
>>> #Fri May 8 18:32:59 CST 2009
>>>
>>> BEGIN {
>>> FS="|"
>>> }
>>>
>>> {
>>> array1[$1]+=$2
>>> }
>>> END {
>>> # n=asort(array1,dest)
>>> print n"\n"
>>> for(i in array1)
>>> {
>>> print i":"array1[i]
>>> }
>>> #print array1[1]
>>> }
>>>
>>> 使用:
>>> awk -f analysis20090508data 20090508data|sort -t: -k1n
>>>
>>> 结果:
>>>
>>> 1:5
>>> 2:3
>>> 3:3
>>> 4:7
>>> 1000000:1
>>>
>>>
>>>
>>>
>>>
>>>
>>> 2009/5/8 ☼ 林永忠 ☼ (Yung-chung Lin) <henearkrxern@gmail.com>:
>>>
>>>
>>> 可以這樣寫
>>>
>>> use Data::Dumper;
>>>
>>> my %hash;
>>>
>>> while (my $line = <STDIN>) {
>>> my ($a, $b) = split /\|/, $line;
>>> $hash{$a} += $b;
>>> }
>>>
>>> print Dumper \%hash;
>>>
>>>
>>> 請參考
>>>
>>> Best,
>>> Yung-chung Lin
>>>
>>> 2009/5/8 Gene <netgene@hotmail.com>
>>>
>>>
>>> 怎样做效率高?
>>> 若域1相同的则进行合并,如下1|2和1|3合并成1|5:
>>> 1|2
>>> 1|3
>>> 2|3
>>> 3|3
>>> 4|3
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> --
>>> Best Regards,
>>> Anthony WU
>>>
>>
>>
>>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: