2013-02-15 66 views
-4

我是Perl新手,我試圖從文件中提取特定數據,從過去的12天直到今天。我需要一個腳本,將每天做perl - 在特定日期從文件中提取數據

日期格式:日 - 月 - 年,例如:15-FEB-13(今天)的文件

例如:

E8:BE:81:86:1E:09;**14-FEB-13**;195.116.227.97  * 
00:78:9E:ED:B8:3B;**30-JAN-13**;195.116.227.97 
00:78:9E:ED:B9:50;**14-FEB-13**;195.116.227.105  * 
00:78:9E:ED:B8:24;**11-FEB-13**;195.116.227.97  * 
4C:17:EB:F1:AE:BF;**16-DEC-12**;195.116.227.97 
00:78:9E:F4:AC:C1;**21-NOV-12**;195.116.227.97 
E8:BE:81:87:03:AA;**11-FEB-13**;195.116.227.97 

etc ............................................. 

我需要過去12天的數據。在上面的例子中,標誌着*提前

感謝您的幫助

+3

你嘗試過什麼了嗎?所以SO不是一個要求爲你完成工作的地方。 – SparkeyG 2013-02-15 14:41:59

+0

數據格式的日期周圍是星號嗎? 「過去12天」是指「今天和前11天」還是「今天和前12天」?即3月2日起或4月2日起? – Borodin 2013-02-15 15:57:34

+0

十幾歲以下的日子看起來像在你的文件? '5'還是'05'? – Borodin 2013-02-15 16:53:34

回答

2

Time::Piece是一個核心模塊,所以不應該需要安裝。

該程序跳過前11天之前的日期行。如果您需要前12天,請將11更改爲12

你要麼需要open輸入文件和使用文件處理,而不是DATA,或者把文件名在命令行上,並使用<ARGV>代替<DATA>

use strict; 
use warnings; 

use Time::Piece 'localtime'; 
use Time::Seconds 'ONE_DAY'; 

my $limit = localtime() - ONE_DAY * 11; 

while (<DATA>) { 
    next unless my ($date) = /([0-3][0-9]-[A-Z]{3}-[0-9]{2})/; 
    $date = Time::Piece->strptime($date, '%d-%b-%y'); 
    print if $date >= $limit; 
} 

__DATA__ 
E8:BE:81:86:1E:09;14-FEB-13;195.116.227.97 
00:78:9E:ED:B8:3B;30-JAN-13;195.116.227.97 
00:78:9E:ED:B9:50;14-FEB-13;195.116.227.105 
00:78:9E:ED:B8:24;11-FEB-13;195.116.227.97 
4C:17:EB:F1:AE:BF;16-DEC-12;195.116.227.97 
00:78:9E:F4:AC:C1;21-NOV-12;195.116.227.97 
E8:BE:81:87:03:AA;11-FEB-13;195.116.227.97 

輸出

E8:BE:81:86:1E:09;14-FEB-13;195.116.227.97 
00:78:9E:ED:B9:50;14-FEB-13;195.116.227.105 
00:78:9E:ED:B8:24;11-FEB-13;195.116.227.97 
E8:BE:81:87:03:AA;11-FEB-13;195.116.227.97