我需要合并两个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