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 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论