【发布时间】:2020-08-03 15:08:48
【问题描述】:
(标题已编辑。原标题:“json 内容:按原样打印部分内容,通过管道部分获取人类可读的时间戳,从同一命令输出”)
我在一个文件中有一个类似 json 的内容:
{
"newState": "runnable",
"setAt": 1587421159359
}
{
"newState": "running",
"setAt": 1587421282891
}
{
"newState": "debug_hold",
"setAt": 1587422014895
}
{
"newState": "terminating",
"setAt": 1587424788577
}
{
"newState": "failed",
"setAt": 1587424796544
}
我可以通过cat timestamps.json | jq -r '.newState'提取'newState':
runnable
running
debug_hold
terminating
failed
我可以通过cat timestamps.json | jq -r '.setAt' | rev | cut -c 4- | rev | perl -pe 's/(\d+)/localtime($1)/e'提取纪元时间戳并将其格式化为人类可读的形式:
Mon Apr 20 18:19:19 2020
Mon Apr 20 18:21:22 2020
Mon Apr 20 18:33:34 2020
Mon Apr 20 19:19:48 2020
Mon Apr 20 19:19:56 2020
如何将两个输出组合起来,结果变成
runnable Mon Apr 20 18:19:19 2020
running Mon Apr 20 18:21:22 2020
debug_hold Mon Apr 20 18:33:34 2020
terminating Mon Apr 20 19:19:48 2020
failed Mon Apr 20 19:19:56 2020
我想我可以为循环和数组输入做一些 bash,但想知道 jq 是否有一些东西可以将部分内容(例如,在这种情况下的纪元时间)输出,处理它,然后将值反馈回jq 解析输出。
【问题讨论】:
-
cat的无用使用。将cat timestamps.json |替换为<timestamps.json