特定の時間からファイルの終わりまでのgrepログファイル

特定の時間からファイルの終わりまでのgrepログファイル

各行の先頭に日付と時刻を含むログファイルがあります。

特定の時間からファイルの終わりまでログファイルを検索する必要があります。

たとえば、

Starting point: July 29 2018 21:00:00
End point     : end of file

私の関心事は、パターンが存在しなくても依然として超過しているため、July 29 2018 21:00:00間の境界を取得できることです。July 29 2018 21:05:11July 29 2018 21:00:00

はいawk、それともsed仕事をしますか?

ベストアンサー1

各行のタイムスタンプを解析するためにPerlを使用してこれを行います。

$ cat file
June 5 2018 00:00:00 do not print
July 29 2018 20:59:59 do not print
July 29 2018 21:00:00 print me
July 29 2018 21:00:01 print me

$ perl -MTime::Piece -sane '
    BEGIN {
        $start = Time::Piece->strptime($startdate, "%B %e %Y %T");
    }
    # the string "@F[0..3]" is the first 4 words on the line
    $time = Time::Piece->strptime("@F[0..3]", "%B %e %Y %T");
    print if $time >= $start;
' -- -startdate="July 29 2018 21:00:00" file
July 29 2018 21:00:00 print me
July 29 2018 21:00:01 print me

このバージョンは、開始日が確認されるとすぐにタイムスタンプの解析を停止するため、より効率的です(ファイルが時系列に並べられていると仮定)。

perl -MTime::Piece -sane '
    BEGIN {
        $start = Time::Piece->strptime($startdate, "%B %e %Y %T");
    }
    unless ($go) {
        $time = Time::Piece->strptime("@F[0..3]", "%B %e %Y %T");
        $go = $time >= $start;
    }
    print if $go;
' -- -startdate="July 29 2018 21:00:00" file

おすすめ記事