我是Perl的新手,我正在尝试从过去12天直到今天的文件中提取特定数据。我需要一个每天都会这样做的脚本
日期格式:日 - 月 - 年,例如: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天的数据。在上面的例子中标记*
提前感谢您的帮助
答案 0 :(得分:2)
Time::Piece
是核心模块,因此不需要安装。
此程序会跳过前11天之前的日期。如果您需要前12天,请将11
更改为12
。
您需要open
输入文件并使用文件句柄而不是DATA
,或者将文件名放在命令行上并使用<ARGV>
而不是{{1} }}
<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