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

如何使用yq 4.35+按字段值匹配列表元素过滤数组

使用 mikefarah/yq 4.35+ 优雅过滤YAML数组

针对你需要保留name字段值属于指定术语列表的YAML数组元素需求,mikefarah/yq 4.35+ 提供了简洁的IN操作符写法,比多个or条件更优雅:

情况1:术语是数组形式

假设你的输入YAML(input.yaml)如下:

- name: bob
  age: 30
- name: jen
  age: 28
- name: mork
  age: 32

直接用IN操作符匹配数组中的术语:

yq 'map(select(.name IN ["jen", "mork"]))' input.yaml

输出结果:

- name: jen
  age: 28
- name: mork
  age: 32

情况2:术语是逗号分隔的字符串

如果你的术语是逗号分隔的字符串(比如"jen,mork"),可以先通过split(",")转成数组再匹配:

yq --arg terms "jen,mork" 'map(select(.name IN ($terms | split(","))))' input.yaml

情况3:术语通过JSON格式变量传入

如果需要从外部传入数组格式的术语,用--argjson参数更方便:

yq --argjson terms '["jen", "mork"]' 'map(select(.name IN ($terms)))' input.yaml

关键说明

  • 注意IN是大写的操作符,yq中小写的in不生效,这是你之前写法出错的原因。
  • 相比手动写多个or条件(比如select(.name == "jen" or .name == "mork")),IN写法在术语数量较多时更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:48:12