awkを使用してISO 8601形式列のタイムスタンプを変更する

awkを使用してISO 8601形式列のタイムスタンプを変更する

私は次のような結果を得ました。

echo "$i"
**@timestamp:** `2023-01-18T15:08:36.698Z`

awk出力して次のようにしたいと思います。

Wed 18 Jan 2023 06:50:38 PM EST

これが私が今まで試したことです:

echo "$i" | awk -F'`' '{print $1, "`"strftime("%Y-%m-%d %T", $2)"`"}'
**@timestamp:**  `1969-12-31 19:33:43`

なぜ1969年となっているのかよくわかりません…ご存知ですか?

date コマンドはフォーマットを完全に検出して変更できます。

date -d $(echo "$i" | awk -F'`' '{print $2}')
Wed 18 Jan 2023 10:08:36 AM EST

なぜawkが機能しないのですか?

ベストアンサー1

コメントですでに指摘されているように、他のツール時間機能がGNUのdate。 GNU awkの時間関数を使って実行したいことをする方法は次のとおりです。

$ TZ='EST' awk -F'`' '{print strftime("%a %d %b %Y %T %Z",mktime(gensub(/[^0-9]/," ","g",$2),1))}' file
Wed 18 Jan 2023 10:08:36 EST

または、実際に目的の出力がコードで実行したい結果である場合:

$ TZ='EST' awk -F'`' '{print strftime("%F %T %Z",mktime(gensub(/[^0-9]/," ","g",$2),1))}' file
2023-01-18 10:08:36 EST

おすすめ記事