perl - 在特定日期从文件中提取数据

时间:2013-02-15 14:38:32

标签: perl

我是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天的数据。在上面的例子中标记*

提前感谢您的帮助

1 个答案:

答案 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