我想使用jq JSON处理器摆脱timestamp
字段。
[
{
"timestamp": 1448369447295,
"group": "employees",
"uid": "elgalu"
},
{
"timestamp": 1448369447296,
"group": "employees",
"uid": "mike"
},
{
"timestamp": 1448369786667,
"group": "services",
"uid": "pacts"
}
]
白名单也适用于我,即select uid, group
最终我真正想要的是一个具有如下唯一值的列表:
employees,elgalu
employees,mike
services,pacts
答案 0 :(得分:41)
如果您只想删除时间戳,可以使用del()
功能:
jq 'del(.[].timestamp)' input.json
但要实现所需的输出,我不会使用del()
函数。由于您知道输出中应显示哪些字段,因此您只需使用group
和id
填充数组,然后使用join()
函数:
jq -r '.[]|[.group,.uid]|join(",")' input.json
-r
代表原始输出。 jq
不会在值周围打印引号。
输出:
employees,elgalu
employees,mike
services,pacts
答案 1 :(得分:5)
对于记录,另一种选择是:
$ jq -r '.[] | "\(.uid),\(.group)"' input.json
(白名单方法可以轻松重新排列顺序,此变体可以轻松修改间距等。)
以下示例可能对任何想要安全CSV的人感兴趣(即使值已嵌入逗号或换行符):
$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"