是否可以在 jq 命令中包含当前时间戳?

use*_*231 4 json jq

我正在运行一个curl Rest-api 调用并尝试在UBUNTU 中添加一些键/值对。这是我当前的命令:

curl ..... | jq -c '{"online": .switches.optional.online, "offline": .switches.optional.offline}'
Run Code Online (Sandbox Code Playgroud)

我收到的输出如下:

{ "online": 85, "offline": 196 }
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是让当前时间戳包含 json 正文,就像:

   { "current-time": "Wed Apr 15 14:18:42 PDT 2020", "online": 85, "offline": 196 }
Run Code Online (Sandbox Code Playgroud)

API响应体没有当前时间戳消息,这可以由jq本身触发吗?

谢谢。

杰克

pea*_*eak 7

jq 有now内置的:

TZ=UTC jq -n 'now | strftime("%a %b %d, %Y %Z %H:%M:%S")'
"Wed Apr 15, 2020 UTC 21:51:07"
Run Code Online (Sandbox Code Playgroud)

请注意,环境变量 TZ 将影响 生成的字符串的 %Z 部分strftime,但不会影响数字时间部分:

TZ=Australia/Sydney jq -n 'now | strftime("%a %b %d, %Y %Z %H:%M:%S")'
"Wed Apr 15, 2020 AEST 21:52:19"
Run Code Online (Sandbox Code Playgroud)

相比之下,strflocaltimejq 和 gojq(jq 的 Go 实现)的函数都将呈现相对于 TZ 的“本地时间”:

$ gojq -n 'now | strflocaltime("%a %b %d, %Y %Z %H:%M:%S")'
"Wed May 04, 2022 EDT 17:39:48"

$ TZ=Australia/Sydney gojq -n 'now | strflocaltime("%a %b %d, %Y %Z %H:%M:%S")'
"Thu May 05, 2022 AEST 07:40:00"

$ TZ=Australia/Sydney jq -n 'now | strflocaltime("%a %b %d, %Y %Z %H:%M:%S")'
"Thu May 05, 2022 AEST 07:40:00"
Run Code Online (Sandbox Code Playgroud)