我是一個初學者,不僅僅是perl編程! 請讓我知道需要改變什麼,或者可以做些什麼。優化perl腳本以根據文件中的日期過濾行
需要優化perl代碼才能運行得更快。 對於測試運行,大約500MB的文件有300萬行,運行時間爲28分鐘。
我知道一個工具,它可以在15分鐘內處理3900萬行,但是我希望在不借助工具的情況下在命令提示符下實現此運行。
早些時候,我使用Date :: Manip和Date :: Parse,並轉移到DateTime,認爲它應該更快。
我的做法是如果日期是ISO-8601(即YYYY-MM-DD),我們並不需要對其進行驗證, 我們可以按字典順序比較(即,LT和GT運營商。)
- 輸入文件日期格式爲07/18/2013 13:45:49
- 輸入文件大小42GB。
- 行數3900萬。
- 列分隔符:|〜|
- 平臺:GNU/Linux的
我已經試過 「>」 和 「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);
爲什麼你的perl代碼(當你是初學者的時候)那個oldschool? – 2013-07-18 12:56:45
您是否嘗試過暫時「取出」您的運行時間?此外,你可以看看:https://metacpan.org/module/Devel::NTPTP#SYNOPSIS –
謝謝指出,我不知道這是oldschool。在爲當前問題尋求解決方案後,我會回到它。 – user2435192