awkを使用して指定期間内のメールログを抽出したい
【追記】
コメントをいただき、以下の方法で指定期間内(例は10分前~現在)のログを抽出することはできました。
しかし、これでは月をまたいだ抽出ができません。
度々失礼して申し訳ないですが、他の手法をご存知の方がいらっしゃいましたらご教授お願いします。
#!/bin/bash
nowtime=`date +'%b %d %H:%M:%S'`
agotime=`date -d '10 minutes ago' +'%b %d %H:%M:%S'`
cat /var/log/maillog |awk -F - -v nowtime="$nowtime" -v agotime="$agotime" 'agotime < $1 && $1 <= nowtime'
お世話になります。
OS:CentOS 6.9
メールログを定期的に抽出したいと思っています。
例えば8月23日12:00~12:10のメールログを抽出したい場合、以下のコマンドで抽出できました。
cat /var/log/maillog |awk -F - '"Aug 23 12:00:00" < $1 && $1 <= "Aug 23 12:10:00"'
しかし、以下のように変数に代入し、実行してもメールログを抽出することができませんでした(エラーも出ません)
#!/bin/bash
nowtime="Aug 23 12:10:00"
agotime="Aug 23 12:00:00"
cat /var/log/maillog |awk -F - '"$agotime" < $1 && $1 <= "$nowtime"'
以下のようにシングルクォートとダブルクォートを変更してみたり色々と試してはみましたが、エラーになるなどして全てダメでした。
cat /var/log/maillog |awk -F - "'$agotime' < $1 && $1 <= '$nowtime'"
最終的には以下のように常に最新の日時を取得し、crontabで数分おきに実行したいと考えております。
nowtime=`date +'%b %d %H:%M:%S'`
agotime=`date -d '10 minutes ago' +'%b %d %H:%M:%S'`
純粋に10分単位のログを抽出するのであれば以下のようにすれば抽出することはできました
#!/bin/bash
agotime10=`date -d '10 minutes ago' +'%b %d %H:'`
minedigit10=`date -d '10 minutes ago' | awk -v FS='' '{print $15}'`
cat /var/log/maillog |grep "${agotime10}${minedigit10}[0-9]"
しかし、ちょうど10分単位の繰り返しとは限らない場合もあったり、その他諸事情も重なり、日時を指定する形の時間範囲で抽出したいと考えております。
上記以外の方法でも、特定の時間~現在の時間(特定の時間以降)のログを抽出できる方法があればご教示いただければと思います。
尚、これらが整えば更にgrepなどで最小限のログを抽出してファイルに出力する予定なので、例としてcatを使っています。
以上、よろしくお願いします。