使用yq在未知键名时提取顶级键与owners对应值的实现方法
完全可以通过yq工具实现该需求
根据日常使用的yq发行版,直接执行对应命令就能输出要求的逐行文本,无需额外编写Shell脚本做二次处理:
mikefarah/yq(单二进制独立发行版,多数人日常使用的版本)
执行命令:
yq '. | to_entries[] | "\(.key), \(.value.owners)"' 目标文件.yml
命令逻辑:将整个YAML结构转换为键值对条目列表,逐一遍历所有顶级条目,直接拼接顶级键名、分隔逗号、对应层级下的owners字段值。针对你给出的示例YAML,执行后输出的内容完全匹配预期:
key_1, value key_2, value key_3, value
如果你的YAML中存在某个顶级键下不存在owners字段的情况,对应行的owners值位置会自动输出为空,不会中断整个遍历流程。如果需要跳过没有owners字段的条目,可以在遍历逻辑里增加判断:
yq '. | to_entries[] | select(.value.owners != null) | "\(.key), \(.value.owners)"' 目标文件.yml
python-yq(基于jq封装、通过pip安装的版本)
执行命令:
yq -r 'to_entries[] | "\(.key), \(.value.owners)"' 目标文件.yml
注意这里必须加-r(原始文本输出)参数,否则输出的所有行都会被额外的双引号包裹,无法生成无格式的纯文本逐行内容。针对示例YAML的输出效果和前面的版本完全一致。
如果需要跳过没有owners字段的条目,调整后的命令:
yq -r 'to_entries[] | select(.value.owners != null) | "\(.key), \(.value.owners)"' 目标文件.yml
内容的提问来源于stack exchange,提问作者Jasmine Wong
相关产品推荐
相关产品推荐

