私はperlだけでなくプログラミングの初心者です!何を変更する必要があるか、またはこれを行うにはどうすればよいか教えてください。
より高速に実行するには、perl コードを最適化する必要があります。300 万行を含む約 500MB のファイルをテスト実行すると、実行時間は 28 分です。
15 分で 3900 万行を処理するツールを知っていますが、ツールに頼らずにコマンド プロンプトでこれを実行したいと考えています。
以前は、Date::Manip と Date::Parse を使用していましたが、DateTime の方が速いはずだと考えて、DateTime に移行しました。
私のアプローチは、日付が ISO-8601 (つまり、YYYY-MM-DD) であり、それらを検証する必要がない場合、辞書式に比較できます (つまり、lt および gt 演算子)。
- 入力ファイルの日付形式は 2013 年 7 月 18 日 13:45:49 です。
- 入力ファイルサイズ 42GB。
- 行数 3900 万。
- 列区切り記号 : |~|
- プラットフォーム: GNU/リナックス
">" と "gt" を試しましたが、ランタイムに違いはありませんでした。
Code snippet:
use DateTime::Format::Strptime;
my $idate = "07/17/2013 00:00:00";
my $Strp = DateTime::Format::Strptime->new(
pattern => '%m/%d/%Y %H:%M:%S',
);
my $inputdt = $Strp->parse_datetime($idate);
open (FILE,"myinputfile.dat") or die "could not input File\n";
while (defined(my $line = <FILE>)) {
my @chunks = split '[|]~[|]', $line;
my $fdate = $Strp->parse_datetime($chunks[6]);
if ( $fdate > $inputdt) {
open(FILEOUT, ">>myoutputfile.dat") or die "Could not write\n";
print FILEOUT "$line";
}
}
close(FILE);
close (FILEOUT);