日付文字列(例:2017年7月20日)をエポックに変換し、Linuxで比較

日付文字列(例:2017年7月20日)をエポックに変換し、Linuxで比較

私はkshを使用しており、次のような数行のテキストファイルがあります。日付部分を現在の日付と比較して日数の違いを見つけて、ファイルの「Server」および「Qmgr」部分を別のファイルに出力しようとします。

これは私の入力ファイルです。

server1        :       Qmgr1      :       20 July 2017
server2        :       Qmgr2      :       22 July 2017
server3        :       Qmgr3      :       22 Dec 2015

現在の日付とファイルの日付の差が90日未満の場合、予想される出力は次のようになります。

サーバー3:Qmgr3

おそらく最も簡単な方法は何ですか?

ベストアンサー1

この試み。スクリプトはコマンドラインまたは標準入力にリストされているファイルを読み取り、各行のサーバーとqmgrの値を印刷します。ここでの日付は今後90日以下です。

#!/bin/sh

# also works with ksh, bash, zsh

now=$(date +%s)
ninety_days=$(( 90 * 24 * 60 * 60 ))

cat "$@" |
while read server colon qmgr colon2 qdate
do
    future=$(date +'%s' -d "$qdate")
    if [  $((future - now))  -lt  $ninety_days  ]
    then
        echo "$server $colon $qmgr"
    fi
done

説明する:

「epoch」(1970-01-01 UTC)と現在時刻の間の秒数を変数に保存しますnow

now=$(date +%s)

90日間の秒数を計算します。

ninety_days=$(( 90 * 24 * 60 * 60 ))

レコードの最後の3つのフィールドから読み取られた日付をEpochとその日付の間の秒数に変換します。変数に保存されていますfuture(変数と比較して明確にするためにこれらの命名now):

    future=$(date +'%s' -d "$qdate")

現在の日付とファイルの日付の間の秒数を取得するには、nowから減算します。future90日に含まれる秒数を計算したので、futureそれをとの差と比較できますnow

    if [  $((future - now))  -lt  $ninety_days  ]

おすすめ記事