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

如何使用mikefarah/yq按顺序处理每个Release输出指定内容

问题:使用mikefarah/yq按Release顺序输出版本及对应变更内容

我有一个记录项目版本发布信息的YAML文件,希望用mikefarah版本的yq工具,实现按每个Release依次输出其名称、对应的新增内容、修复内容的目标。当前使用的命令输出顺序不符合预期,寻求正确的命令写法。

原始YAML文件内容

releases:
  - name: v0.1.0
    changes:
      added:
        - Second feature (#4)
      fixed:
        - Second fix (#5)
  - name: v0.0.1
    changes:
      fixed:
        - First fix (#3)
      security:
  - name: v0.0.1
    changes:
      added:
        - Bootstrap the project (#1)
        - First feature (#2)

期望输出

v0.1.0
Second feature (#4)
Second fix (#5)
v0.0.1
First fix (#3)
v0.0.1
Bootstrap the project (#1)
First feature (#2)

当前使用的命令及问题

命令

.releases[] | (
  .name,
  .changes.added[],
  .changes.fixed[]
)

当前输出

v0.1.0
v0.0.1
v0.0.1
Second feature (#4)
Bootstrap the project (#1)
First feature (#2)
Second fix (#5)
First fix (#3)

当前问题:命令会先输出所有Release名称,再输出所有新增内容,最后输出所有修复内容,无法按单个Release依次输出对应信息。


解决方案

问题出在原命令的遍历逻辑:它会先批量输出所有.releases[].name,再批量遍历所有.releases[].changes.added[],最后批量遍历所有.releases[].changes.fixed[],没有在单个Release的上下文内完成完整输出。

正确的命令需要对每个Release单独处理,在单个Release的范围内先输出名称,再依次输出其added和fixed的内容。同时要处理某些Release可能缺少added或fixed字段的情况,用// []将不存在的字段转为空数组,避免执行报错。

正确命令

.releases[] | (
  .name,
  (.changes.added // [])[],
  (.changes.fixed // [])[]
)

输出验证

执行该命令后,会得到与期望完全一致的输出:

v0.1.0
Second feature (#4)
Second fix (#5)
v0.0.1
First fix (#3)
v0.0.1
Bootstrap the project (#1)
First feature (#2)

内容的提问来源于stack exchange,提问作者Sébastien MICHOY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:55:01