私は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 SS
YYYY部分が欠落しているので、以下のコードにダミー年「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