本帖最后由 zhangmaocun 于 2013-01-12 20:54 编辑
文件的内容如下:
a,b,c,d,1,2
b,c,d,2,2,3
a,b,c,d,1,4
前四个都相同的话,第五和第六个分别求和,得到的结果如下:
a,b,c,d,2,6
b,c,d,2,2,3
刚学perl,自己写了个:
#!/usr/bin/perl -w
my $file="/opt/a.txt";
my $line;
my %hash;
open(IN,"<$file");
while($line=<IN>){
chomp($line);
my @rowline = split(/,/, $line);
$a=$rowline[0].",".$rowline[1].",".$rowline[2].",".$rowline[3];
$b=$rowline[4].",".$rowline[5];
if ($hash{$a})
{
my $temp=$hash{$a};
my @temp=split(/,/, $temp);
my $temp1=$temp[0]+$rowline[4];
my $temp2=$temp[1]+$rowline[5];
$hash{$a}=$temp1.",".$temp2;
}
else
{
$hash{$a}=$b;
}
}
close IN;
open (OUT,">b.txt");
while(($key, $value) = each %hash)
{
print "$key $value\n";
print OUT $key.",".$value."\n";
}
close OUT;
虽然能实现,感觉效率低吧。大数据的话应该慢吧,求个高效率的。 |