将 YAML 文件与yq
, 连接数组合并。
假设
在file1.yml
和file2.yml
中,animals
数组都包含一个带有多行字符串的索引。
elephant
donkey
对于file1.yml
, 和
monkey
pelican
为file2.yml
.
既然您询问了concatenated array,我假设file1.yml
,file2.yml
并且results.yml
应该是这样的:
# 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
4.x,您可以使用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