如何解决用jq将多个列表合并为单个列表
我有一个aws cli bash循环,它生成包含字典的多个json列表。 我无法通过jq将列表与所有字典合并为一个大列表。
例如
[ { "key1": "value1","key2": "value2" },{ "key1": "value3","key2": "value4" }
]
[ { "key1": "value5","key2": "value6" }
]
[ { "key1": "value7" }
]
这通过管道传递到jq,我希望将其合并到
[ { "key1": "value1","key2": "value4" },{ "key1": "value5","key2": "value6" },{ "key1": "value7" }
]
解决方法
您要使用add
function。这样您就可以将列表合并为一个列表。
添加
数组的个元素加在一起。总而言之, 连接或合并,具体取决于元素的类型 输入数组-规则与+运算符的规则相同 (如上所述)。过滤器add将一个数组作为输入,并产生
作为输出
➜ echo "[[1],[2],[3]]" | jq '.[]'
[
1
]
[
2
]
[
3
]
➜ echo "[[1],[3]]" | jq add
[
1,2,3
]
,
假设你有 jq 1.5,这里发布的解决方案:
JQ How to merge multiple objects into one
提供将 jq -n
与 inputs
运算符一起使用的基本技术。
cat FILE | jq -n '[inputs|.[]]'
可以解决问题。 [inputs]
将多个结果粘合到一个列表中,而“.[]”则去除了添加的额外级别的列表。
我使用awk破解了补丁,必须有一种使用jq进行修复的方法。
| awk 'NR==1{print}NR>1{sub(/^]/,"");sub(/^\[/,",");print}END{print "]"}' \
它的作用,1.跳过第一行“ [”(保留在原处),2.删除行首的所有“ ^]”,3.将行首的“ [”替换为“,” new列表开头,并在4.结尾处全部用“]”结束
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。