2009年5月9日星期六

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

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
> >>
> >
> >
> > >
> >
>
> >


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

没有评论: