-5

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

提前感谢您的帮助

4

1 回答 1

2

Time::Piece是一个核心模块,所以不需要安装。

该程序跳过日期早于前 11 天的行。如果您需要前 12 天,请更改1112.

您将需要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
于 2013-02-15T16:11:55.623 回答