-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 に答える