2つのタイムスタンプ間のgrepデータ

2つのタイムスタンプ間のgrepデータ

私はLinux初心者です。

    Oct 07  11:00:33 some text
    Oct 07  12:00:33 some text
    Oct 08  14:00:33 some text
    Oct 08  21:00:33 some text
    Oct 09  21:00:33 some text

間にログをgrepしたい2015-07-08 12:00:33到着2015-07-10 21:00:31

私が受け取ったこのコードでできると思います。ここ

sudo awk -v start='2015-07-08 12:00:33' -v end='2015-07-10 21:00:31' '
 BEGIN{ gsub(/[:-]/," ", start); gsub(/[:-]/," ", end) }
      { dt=$1" "$2; gsub(/[:-]/," ", dt) }
 mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)' a.txt

ログの日付/時刻形式が次の場合にテストしました。2015-10-09 21:00:33

しかし、私のログの日時フォーマットはOct 09 21:00:33

だからどのように変換するのかわかりません。2015-10-09 21:00:33

答え1

記録したタイムスタンプは簡単に解析できないため、解析可能で許容可能な形式に変換する必要があります。mktime() 関数これはYYYY MM DD HH MM SSYYYY部分が欠落しているので、以下のコードにダミー年「2022」を追加しました。

月名をその月番号に変換するカスタム Month2num() 関数もあります。

gawk -v year='2022'  -v start='2022 10 07 12 00 33' -v end='2022 10 08 21 00 31' '
function month2num(mon ){
     return sprintf("%02d", (index("JanFebMarAprMayJunJulAugSepOctNovDec", mon)+2)/3)
 }

{ dt=year" "month2num($1)" "$2" "$3; gsub(/[:-]/," ", dt) }

mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)' infile

出力:

    Oct 07  12:00:33 some text
    Oct 08  14:00:33 some text

関連情報