2013-02-17 58 views
1

我遇到了一個問題,我不知道如何解決。我有一個大約250k行的巨大日誌文件,每行信息都是一分鐘(即09:00:00,09:01:00等)分開的,而不是在電子表格中提取我需要的每一行,想通過腳本來做到這一點。雖然我在編寫腳本方面經驗不足,但我正在努力學習Perl。Perl RegExp:打印符合特定時間戳的行

我想要做的是:提取與時間戳(09:03:00,09:18:00,09:33:00,09:48:00)匹配的每一行並將其打印到新的文件。

這是實現這一

#!/usr/bin/perl 
use warnings; 
use strict; 
use diagnostics; 

my @expression = ('09:03:00', '09:18:00', '09:33:00', '09:48:00'); 
open FILE, "logfile.txt" or die $!; 
if (FILE =~ @expression) { 
print "$_\n"; 
} 

回答

2

像這樣:

open FILE, "logfile.txt" or die $!; 
print grep /09:(03|18|33|48):00/, <FILE>; 
close FILE or warn $!; 

但沒有必要對Perl,即:

grep '09:\(03\|18\|33\|48\):00' logfile.txt > output.txt 
+1

謝謝你,用grep我想是一個更好的方法。再次感謝! – 2013-02-17 14:52:31

3

我可怕的壞嘗試你沒有真正使用代碼中的正則表達式。你想要的表達方式是

my $expression = /09:(03|18|33|48):00/ 

而掃描文件的代碼可能也不起作用。更標準的方法是

while(<FILE>) 
{ 
    if(/$expression/) { print; } 
} 

while(<FILE>) 
{ 
    if($_ =~ $expression) 
    { 
    print "$_\n"; 
    } 
}