シェルスクリプトで年パラメータなしで日付を比較するには?

シェルスクリプトで年パラメータなしで日付を比較するには?

Linuxには次のログファイルがあります。

Mar  2 09:46:45 [rest of the log]

Debian Linuxの多くのサービスログには年情報が含まれていないため、私の考えでは、ログは最近のイベントを示唆しているようです。

このログ行が最後の10分かどうかを確認したいので、次のようにしました。

Now="$(date '+%b %d %H:%M:%S')"
echo "Now : $Now"

TENMINSEC=$(date -d 'now - 10 minutes' '+%s')
echo "Ten min before : ${TENMINSEC}"

LOGDAT=$(date -d 'Mar  2 09:45:40' '+%s')
echo "LOGDAT : ${LOGDAT}"

if [ $LOGDAT -ge $TENMINSEC ];then 
    echo "Log date is greater"; 
fi

LOGDATと最近10分を秒に変換して比較します。

しかし、私が望むことをしているのは混乱していますか?年情報が含まれていない場合、結果に影響はありませんか?どうすれば解決できますか?

添付:

ログファイル行の読み込みに問題はありません。ログファイルから読み取った内容は、コードの日付(3月2日09:45:40)に置き換えられます。

ベストアンサー1

日付文字列に年が指定されていない場合、GNU date(使用中のように見える)は日付が現在の年を参照していると仮定します。

$ date -d 'Mar  2 09:45:40'
Sat Mar  2 09:45:40 CET 2019

したがって、この日付をUnix時間に変換して同じ形式の他の日付と比較することは、新年の前日が真夜中であることを除いて正しいことを行います。

おすすめ記事