merge - jq在数组中查找后合并对象
问题描述
生成的配置文件(来自 ls)导致
[
{
"file": "PDF/College Louise Michèle 402.pdf",
"rotation": "-90",
"fiducial": false
}
]
[
{
"file": "PDF/College PLUM 4 A.pdf",
"rotation": "-90",
"fiducial": false
}
]
[
{
"file": "PDF/College RS 4 D.pdf",
"rotation": "-90",
"fiducial": false
}
]
[
{
"file": "PDF/Q College.pdf",
"rotation": "90",
"fiducial": "false"
}
]
[
{
"file": "PDF/Test_q2c.pdf",
"rotation": "90",
"fiducial": "true",
"nopdf": "true"
}
]
[
{
"file": "PDF/Test_q2c.pdf",
"rotation": "90",
"fiducial": "true",
"x":"false"
}
]
[
{
"file": "PDF/Test q2b.pdf",
"rotation": "90",
"fiducial": false
}
]
[
{
"file": "PDF/Test questionnaires.pdf",
"rotation": "90",
"fiducial": false
}
]
[
{
"file": "PDF/XCollege Bourail 4 B pdf.pdf",
"rotation": "-90",
"fiducial": false
}
]
[
{
"file": "PDF/test rotate.pdf",
"rotation": "90",
"fiducial": false
}
]
我需要使用文件名作为键来提取每个对象,这是由
jq -r ".[] | select(.file | contains("q2c"))"
不幸的是,存在冲突,当对象不是唯一的时,我需要合并它们。例如得到的答案:
{
"file": "PDF/Test_q2c.pdf",
"rotation": "90",
"fiducial": "true",
"nopdf": "true"
}
{
"file": "PDF/Test_q2c.pdf",
"rotation": "90",
"fiducial": "true",
"x":"false"
}
预期答案
{
"file": "PDF/Test_q2c.pdf",
"rotation": "90",
"fiducial": "true",
"nopdf": "true",
"x":"false"
}
我尝试.|group_by(.file)[]|add
但没有成功...在此先感谢。
解决方案
add
对于相对较小的输入流,您可以使用函数和-s
命令行选项“啜饮”对象并将它们组合成一个数组:
jq --slurp 'add | map(select(.file | contains("q2c"))) | add'
推荐阅读
- reactjs - 我需要类似于下面给出的引导响应导航栏组件的材料 UI 组件
- azure-devops - Azure Devops 分支选项卡未在构建管道中显示任何内容
- sql - 如何在 SQL 中创建 CREATE VIEW INVOICE_V?
- amazon-dynamodb - 根据用户角色/访问权限从 dynamodb 表中获取数据
- postman - 有没有办法在 Postman Collection 中的每个请求之后运行测试脚本?
- python - 从 pandas DataFrame 条目中删除不必要的字符
- javascript - 使用纯 Javascript 触发 jQuery 事件
- google-analytics - 为什么 Google Adsense 点击计数与 Google 分析数据不匹配
- html - 如何在 HTML5 视频播放器中将字幕居中?如何进一步设置字幕/字幕的样式?
- drools - Drools 比较一个列表是否包含另一个列表中的元素