2009年5月9日星期六

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

貌似浪费判断了,忘记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
> > >>
> > >
> > >
> > > >
> > >
> >
> > > >


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

没有评论: