2009年5月10日星期日

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

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 访问该论坛

-~----------~----~----~----~------~----~------~--~---

没有评论: