スクリプト内からいくつかのタイムスタンプ プリントを実行しましたが、この作業には時間がかかりすぎます。完了するまでに約 5 分かかります...!!!
参考までに、strArr 配列には約 1500 個の文字列要素が含まれています。(このループは何度も実行されます)
ファイル tmp_FH_SR は 27Mb で 300,000 行のデータです。ファイル tmp_FH_RL は 13 Mb で、約 150,000 行のデータがあります。
実際の名前を保護するために変数の名前を変更しました...
最初の while ループでは、$str がファイル内で 1 回だけ見つかったという事実に基づいて、一致するレコードから別のフィールドを取得します。このフィールドを使用して、別のファイルでこのフィールドが出現する回数を検索します。その出力に基づいて、配列に $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);}
}
}
どうすれば速くできますか?配列内の 27mb と 13mb のファイルを 1 回読み取って動作しますか? これが実行されているホストで他の多くのプロセスが実行されているため、それを避けたかったのです。
タイ。