「2014-01-30 05:04:27 GMT」のような日付があり、date -d "2014-01-30 05:04:27 GMT"を実行すると、出力はサーバーのタイムゾーン( "Thu Jan 30 16:04:27 EST 2014」)。
Grepとcutを使用して、ファイルからGMTで日付を抽出しました。しかし、これを現地時間に変換するのに苦労しています。
例えば:
[user @ server log]#grep "something" logfile.txt | grep "成功" |カット-f1 -d '['
出力:2014-01-30 05:04:27 GMT
その出力を「date -d」に渡すために、最後に何を追加できますか?
試みました:
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"
または、パイプライン形式を使用する場合:
grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }
問題は、date
がstdinを使用しないことです。したがって、stdinを変数(ここではgmt
と呼びます)に取り込み、コマンドラインでdate
に指定する必要があります。
2番目のアプローチの出力例:
$ echo "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014
GNU十分に最近のcoreutilsからの日付を使用している場合、date -f
、ヘルプ画面から:
-f, --file=DATEFILE like --date once for each line of DATEFILE
したがって、あなたの試み4は次のようになります:
$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -
最後 -
はstdinを表します。