web-dev-qa-db-ja.com

出力をdate -d "値"にパイプするにはどうすればよいですか?

「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」に渡すために、最後に何を追加できますか?

試みました:

  • [user @ server log]#grep "something" logfile.txt | grep "成功" |カット-f1 -d '[' |日付-d
  • [user @ server log]#grep "something" logfile.txt | grep "成功" |カット-f1 -d '[' |日付
  • [user @ server log]#grep "something" logfile.txt | grep "成功" |カット-f1 -d '[' |日付-d "$ 1"
14
Shane
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
13
John1024

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を表します。

19
hroptatyr