You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个.yaml文件?指定层级共享键保留指定文件值

合并YAML文件并实现指定键的覆盖规则

你需要的这种合并逻辑,mikefarah/yq(v4版本)完全可以实现,这是目前最常用的YAML处理工具之一。

需求回顾

  • 顶层键(如name):直接用file2.yaml的值覆盖file1.yaml
  • paths下的子键:同名键用file2.yaml的值替换,非同名键保留file1.yaml的内容

示例文件

file1.yaml

name: 'file1'
paths:
  path1: 
    content: "t"
  path2:
    content: "b"

file2.yaml

name: 'file2'
paths:
  path1: 
    value: "t"

实现命令

在终端执行以下命令即可生成目标file3.yaml:

yq eval-all '. as $item ireduce ({}; . * $item | .paths = $item.paths * .paths)' file1.yaml file2.yaml > file3.yaml

命令解释

  • eval-all:处理多个输入文件
  • . as $item ireduce ({}; ...):遍历所有输入文件,逐步合并到初始空对象
  • . * $item:先做全局深度合并,顶层键自动用后文件覆盖前文件(比如name会被file2的值替换)
  • .paths = $item.paths * .paths:单独对paths键做反向合并——用当前遍历到的文件(这里是file2)的paths子键覆盖之前合并结果中的同名子键,同时保留file1中独有的paths子键

合并结果(file3.yaml)

name: 'file2'
paths:
  path1:
    value: "t"
  path2:
    content: "b"

内容的提问来源于stack exchange,提问作者William Jiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:22:16