合并2个仅在本地更新的YAML文件



我需要合并两个YAML文件,仅在地图文件上使用YQ/JQ更新。让我解释一下我的场景。

data.yaml

data1:
subkey1: subvalue1
subkey2: subvalue2
data2: value2
data3:
subkey3: subvalue3

map.yaml

data1:
data3:
subkey3:

预期结果:

data1:
subkey1: subvalue1
subkey2: subvalue2
data3:
subkey3: subvalue3

我试着向上看,找不到任何解决方案来实现这一点。数据&地图应该是在变化的。有没有办法在jq或yq中实现这一点?

这会产生所需的输出,并且可能接近您想要的输出:

gojq -n --yaml-input --yaml-output '
input as $data
| input as $map
| reduce ($map | keys[]) as $k ({}; .[$k] = $data[$k])
' data.yaml map.yaml

然后,也许这更接近:

gojq -n --yaml-input --yaml-output '
input as $data
| input as $map
| reduce ($map | tostream | select(length==2)) as [$k, $_] ({}; setpath($k; $data | getpath($k)) )
' data.yaml map.yaml

最新更新