私は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
から減算します。future
90日に含まれる秒数を計算したので、future
それをとの差と比較できますnow
。
if [ $((future - now)) -lt $ninety_days ]