使用 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

相关内容