从 jq json 输出中排除列
Exclude column from jq json output
我想使用 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
如果您只想删除时间戳,可以使用 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
郑重声明,另一种选择是:
$ jq -r '.[] | "\(.uid),\(.group)"' input.json
(白名单方式方便重新排列顺序,这种变体方便修改间距等)
想要安全 CSV 的任何人(即,即使值中嵌入了逗号或换行符)可能会对以下示例感兴趣:
$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"
Sed 是您最好的朋友 - 我想不出比它更简单的了。我来到这里遇到了与问题作者相同的问题 - 但也许这是对同一问题的更简单的答案:
< file sed -e '/timestamp/d'
我想使用 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
如果您只想删除时间戳,可以使用 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
郑重声明,另一种选择是:
$ jq -r '.[] | "\(.uid),\(.group)"' input.json
(白名单方式方便重新排列顺序,这种变体方便修改间距等)
想要安全 CSV 的任何人(即,即使值中嵌入了逗号或换行符)可能会对以下示例感兴趣:
$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"
Sed 是您最好的朋友 - 我想不出比它更简单的了。我来到这里遇到了与问题作者相同的问题 - 但也许这是对同一问题的更简单的答案:
< file sed -e '/timestamp/d'