過去30分間のログを取得する

過去30分間のログを取得する

現在のタイムスタンプから30分前のログを抽出したいと思います。以下のスクリプトを開発しましたが、正しく動作しません。タイムスタンプ付きの行のみを表示し、タイムスタンプ付きの行間にタイムスタンプが指定されていないログ行を取得する必要があります。次のパターンを含むログファイルがあります。

スクリプト:

awk -v TSTART="$(date -v -30M "+%Y-%m-%d %H:%M")" -v TEND="$(date "+%Y-%m-%d %H:%M")" '$0>=TSTART && $0<=TEND' webservice_logs.log

ログファイルモード:

答え1

最初のフィールドが日付フィールドの場合にのみ設定されるフラグに基づいて行を印刷できます。pawkに行を印刷(when p==1)またはスキップする(when p==0)指示するフラグを持つ次のコードを参照してください。

awk -v tstart="$start" -v tend="$end" '
    /^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
        t = $1 " " $2
        p = t >= tstart && t <= tend ? 1 : 0
    }p' webservice_logs.log

ERROR行の先頭にはタイムスタンプがないため、この行にフラグの変更はありません。

編集する一行で:

awk -v tstart="$start" -v tend="$end" '/^[0-9]{4}-[0-9]{2}-[0-9]{2}/{t = $1 " " substr($2,1,5); p = t >= tstart && t <= tend ? 1 : 0}p' webservice_logs.log

答え2

あなたはこれを試すことができます

awk -vStartDate=`date -d'now-30 min' +%H:%M:%S` '{ if ($2 > StartDate) print $0}' web.log

関連情報