我在脚本中做了一些时间戳打印,这篇文章花了太长时间:差不多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.
你会向后退,这是为什么花了这么长时间的一个原因.
@strAtt 只有1500个条目,并且由于您的循环,您正在读取每个文件1500次.
将entires放入@strArr地图或使用多维数组,以便您可以跟踪每个条目的计数.从文件中读取一行,然后循环遍历1500个条目.您现在只读入一次文件.
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |