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

如何用yq合并YAML树组件并按foo/bar拆分多文档?

用yq按foo/bar轴拆分YAML文档

输入YAML结构

root1:
  foo:
    prop1: val1
  bar:
    prop1: val2
root2:
  foo:
    prop2: val3
  bar:
    prop2: val4

目标输出

root1:
  foo:
    prop1: val1
root2:
  foo:
    prop2: val3
---
root1:
  bar:
    prop1: val2
root2:
  bar:
    prop2: val4

实现步骤

1. 构建可拆分的数组

先把每个目标轴(foo、bar)对应的所有root节点数据提取出来,组合成一个数组。用yq的keys方法获取顶级节点(root1、root2),再对每个轴做映射处理:

yq '["foo", "bar"] | map( . as $axis | reduce keys[] as $root ({}; .[$root] = {($axis): $parent[$root][$axis]}))' input.yaml

这段命令的逻辑:

  • 先定义要拆分的轴数组["foo", "bar"]
  • 遍历数组中的每个轴$axis,再遍历所有顶级root节点
  • 为每个root节点仅保留当前轴对应的子结构,最终组合成完整对象
  • 所有轴对应的对象会被收集到一个数组中

执行后得到的数组结构:

- root1:
    foo:
      prop1: val1
  root2:
    foo:
      prop2: val3
- root1:
    bar:
      prop1: val2
  root2:
    bar:
      prop2: val4

2. 拆分为多个文档

基于上述数组,直接用split_doc函数把数组的每个元素拆分成独立的YAML文档:

yq '["foo", "bar"] | map( . as $axis | reduce keys[] as $root ({}; .[$root] = {($axis): $parent[$root][$axis]})) | split_doc' input.yaml

执行后就能得到目标格式的多文档YAML输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:03