我有这样的输出:
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