2016-04-06 10 views
0

Ich versuche diese awk-Funktion in Perl zu konvertieren, es analysiert eine Apache-Protokolldatei und druckt Einträge, die in der letzten Minute erstellt wurden.awk 2 perl conversion

awk vDate=$(date -d'now-1 minutes' +[%d/%b/%Y:%H:%M:%S]) '$4 > Date ' 

Ich bin neu in Perl, und ich bin jetzt sicher, wie ich Systemfunktion $(date -d'now-1 ..etc) Perl entorplate kann.

+0

Sind Sie sicher, dass der Vergleich '>' in awk Daten in diesem Format korrekt vergleichen kann? – choroba

+2

Probieren Sie [Time :: Piece] (https://metacpan.org/pod/Time::Piece) aus, siehe [Lösen Sie fast alle Datetime Bedürfnisse mit Time :: Piece] (http://perltricks.com/article/59/2014/1/10/Solve-fast-any-datetime-need-with-Time - Piece /) –

+0

Sie können einen Systemaufruf in Perl mit den Backticks '$ perl -e '$ d = \' date \ 'durchführen ; Druck $ d'' – dawg

Antwort

4

Verwendung Time::Piece:

perl -MTime::Piece -ane ' 
    BEGIN { $now = time } 
    print if Time::Piece->strptime($F[3], "[%d/%b/%Y:%H:%M:%S]")->epoch 
      > $now - 60' access_log 

Sie auch $^T statt $now verwenden können, können Sie dann den ganzen Block BEGIN löschen.

perl -MTime::Piece -ane ' 
    print if Time::Piece->strptime($F[3], "[%d/%b/%Y:%H:%M:%S]")->epoch 
      > $^T - 60' access_log