私はBASHを使用してファイル(〜/ logs / Server_Info.log)からタイムスタンプを取得するスクリプトを作成しています。特にタイムスタンプから時間を抽出して変数に記録したいと思います。
タイムスタンプに使用する形式は次のとおりです。
date +"%b-%d-%Y-%I:%M:%S %p"
このスクリプトを使用してデータを抽出します。
#!/bin/bash
LAST_HOUR="$(( $(date +%I) - 1 ))"
SEARCH_STRING=$(date +"%b-%d-%Y-${LAST_HOUR}:")
timeval=$(grep "${SEARCH_STRING}" ~/logs/Server_Info.log)
echo "$timeval"
exit 0
ただし、このスクリプトを実行するたびに、次の2つの答えが得られます。
ブランク出力
-または-
04
私のタイムスタンプは次のようなので、これは完全に間違っています。
Mar-24-2017-05:07:00 PM
答え1
awkの場合は次のようになります。
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4}') && echo $var
04
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4 - 1}') && echo $var
3
答え2
ログファイルには、2017-03-15T08:00:23.698411Z形式の日付形式が含まれています。この時間が UTC 形式の場合 (例: 2017-03-15T08:00:23.698411Z (時刻と日付は 08:00:23 および 2017-03-15))、IST に変換する必要があります。過去 1 時間の間、次のコマンドを使用します。
date -d '2017-03-15T08:00:23.698411Z last hours' -u +%s
1489561223
date -d @1489561223 +"%Y/%m/%d-%H:%M:%S"
2017/03/15-07:00:23
2時間前に戻るには、「過去の時間」の代わりに「2時間前」を使用してください。
注: - Linuxサーバーで上記のコマンドを実行しており、LinuxサーバーのタイミングはUTCです。 IST Linuxサーバーで上記のコマンドを実行するには、さらに5時間30分を追加する必要があります(例:「前回」ではなく「6時間30分前」)。