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


12

「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"

回答:


12
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を変数(gmtここに呼び出されます)に取り込み、それをコマンドラインでに指定する必要がありdateます。

2番目のアプローチの出力例:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014

1
ありがとう、これで問題は解決しました!また、機能しなかった理由を説明していただきありがとうございます。
シェーン

18

十分に新しいcoreutilsからのGNU日付を使用している場合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を表します。


2
これは受け入れられる答えになるはずです。
Petrus

上記のコマンドの出力を特定の日付と比較することは可能ですか?例えば。「Wed Jan 30 21:04:27 PST 2014」より前のすべての日付をリストする必要があります
Manu

@Manu自体はそうではありません。dateutilsdategrepその特定のユースケースに対応しています。
hroptatyr 2017

これはとても簡単です!私が読むことができれば、彼のmanページでこれを見つけたかもしれません。
Ken Sharp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.