如何使这个perl更快地循环

raj*_*eev 0 perl while-loop

我在脚本中做了一些时间戳打印,这篇文章花了太长时间:差不多5分钟就完成了...... !!!

fyi,strArr数组包含大约1500个字符串元素.(这个循环多次运行)

文件tmp_FH_SR是27Mb和300,000行数据.文件tmp_FH_RL为13 Mb,包含大约150,000行数据.

我更改了变量名称以保护实际名称......

在第一个while循环中,基于$ str仅在文件中找到一次的事实,我从匹配记录中获取另一个字段.我使用此字段在另一个文件中搜索此字段的出现次数.根据该输出,我将$ str添加到一个数组.

my $tmp_srt;
foreach my $str (@strArr)
{
    my $tmp1;
    my $count=0;
    seek $tmp_FH_SR,0,0;
    while (<$tmp_FH_SR>)
    {
        my $line=$_;chomp($line);
        if ($line=~ m/\"$str\"/)
        {
            $count++;
            if ($count == 1)
            {
                my @tmp_line_ar = split(/\,/,$line);
                $tmp_str=$tmp_line_ar[10];
            }
        }
    }
    if ($count == 1)
    {
        my $k;
        seek $tmp_FH_RL,0,0;
        while (<$tmp_FH_RL>)
        {
            my $line=$_;chomp($line);
            if ($line=~m/\"$tmp_str\"/) {$k++;}
        }
        if($k == 1){push(@another_str_arr,$str);}
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它更快?一次读取阵列中的27mb和13mb文件并工作?我想避免这种情况,因为许多其他进程正在运行它的主机上运行.

TY.

Bri*_*ach 7

你会向后退,这是为什么花了这么长时间的一个原因.

@strAtt 只有1500个条目,并且由于您的循环,您正在读取每个文件1500次.

将entires放入@strArr地图或使用多维数组,以便您可以跟踪每个条目的计数.从文件中读取一行,然后循环遍历1500个条目.您现在只读入一次文件.