perl 合并hash表问题

我写了一个perl程序合并文件,具体功能为:输入:多个文件,每个文件中,一行记录一个单词及其频率输出:合并所有文件相同单词的频率,输出到一个文件。用Hash表进行处理程序... 我写了一个perl程序合并文件,具体功能为:
输入:多个文件,每个文件中,一行记录一个单词及其频率
输出:合并所有文件相同单词的频率,输出到一个文件。
用Hash表进行处理
程序如下:
use 5.010;

$num=@ARGV; #参数个数需要取成变量
foreach $count(0..$num-1) #索引号从0开始
{
open(FH,'<',$ARGV[$count])or die $!;
@new_array=<FH>; #indexback_i.txt内容
close(FH);
open(fhr,'<','index_result.txt') or die $!; #读原键值对
@old_array=<fhr>;

foreach $new_line(@new_array) #对于新文件的每一行
{
chomp($new_line);
($nk,$nv)= split (',', $new_line); #取新键值对

$is=0; #每个新key设立标志位,若没有相同key则加入hash
foreach $ok(sort keys %hash) #对于排序的hash每个键
{
$ov=$hash{$ok}; #原键值对存入hash
if($ok eq $nk) #若新键等于原键
{
$ov = $ov + $nv ;
$hash{$ok}=$ov; #值相加
$is=1; #标志位改变,退出hash循环
last;
}

}
if($is eq 0) #新键加入hash
{
$hash{$nk}=$nv;
}
}
}
open(fhw,'>','index_result.txt')or die $!; #最后按序写入hash
foreach $str (sort keys %hash)
{
print fhw "$str,$hash{$str}\n";
}

程序是对的,就是觉得太繁琐。请问怎么写的简洁一点呢?
谢谢!
展开
 我来答
百度网友d580670
2014-03-21 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:685万
展开全部
是麻烦多了
%hash = ();
sub add
{
   my $ref = shift;
   for (0..$#$ref)
   {
      my ($k, $v) = split(",", chomp $ref->[$_]);
      $hash{$k} += $v;
   }
}  
for (0..$#ARGV-1)                             #索引号从0开始
{
    open(FH,'<',$ARGV[$_])or die $!;
    @new_array=<FH>;
    close(FH);
    add(\@new_array);
}
open(fhw,'>','index_result.txt')or die $!;            #最后按序写入hash
foreach $str (sort keys %hash) 
{
    print fhw "$str,$hash{$str}\n";    
}
月轮天唯五
2014-03-22 · TA获得超过377个赞
知道小有建树答主
回答量:387
采纳率:100%
帮助的人:158万
展开全部
把所有的文件发给我。或者发几个文件给我。
我给你一个perl版本
一个linux版本

perl教会我们懒惰,所以我学了awk,sed
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式