如何解决连接数组时合并两个 yaml 文档
我想合并两个 yaml 文档,结果包含
- 所有映射值(最后一个优先)
- 连接数组
例如给定这个文件
# file1.yml
animals:
- elephant
donkey
flavours:
sour:
- lemon
sweet:
- chocolate
strange: true
还有这个文件
#file2.yml
animals:
- monkey
pelican
flavours:
sweet:
- vanilla
strange: false
结果应该包含所有节点,合并的数组和不是来自最后一个文件的数组的值
#result.yml
animals:
- elephant
donkey
monkey
pelican
flavours:
sour:
- lemon
sweet:
- chocolate
vanilla
strange: false
yq 可以这样做吗?
解决方法
将 yaml 文件与 yq 合并,连接数组。
假设
在文件 1 和文件 2 中,animals
数组都包含一个带有多行字符串的索引。
elephant
donkey
对于 file1.yml 和
monkey
pelican
对于 file2.yml。
既然您询问了连接数组,我假设 file1、file2 和结果应该是这样的:
# file1.yml
animals:
- elephant
- donkey
flavours:
sour:
- lemon
sweet:
- chocolate
strange: true
#file2.yml
animals:
- monkey
- pelican
flavours:
sweet:
- vanilla
strange: false
#result.yml
animals:
- elephant
- donkey
- monkey
- pelican
flavours:
sour:
- lemon
sweet:
- chocolate
- vanilla
strange: false
示例
使用 yq4,您可以使用 ireduce
运算符合并两个或多个文件:
https://mikefarah.gitbook.io/yq/operators/reduce#merge-all-yaml-files-together
$ yq4 eval-all '. as $item ireduce ({}; . * $item)' file1.yml file2.yml
animals:
- monkey
- pelican
flavours:
sour:
- lemon
sweet:
- vanilla
strange: false
两个文件都已合并,但重复的键和数组已被最新文件覆盖。
要附加数组而不是覆盖它们,只需在合并运算符 (+
) 后添加一个 *
。
https://mikefarah.gitbook.io/yq/operators/multiply#merge-appending-arrays
$ yq4 eval-all '. as $item ireduce ({}; . *+ $item)' file1.yml file2.yml
animals:
- elephant
- donkey
- monkey
- pelican
flavours:
sour:
- lemon
sweet:
- chocolate
- vanilla
strange: false
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。