如何用yq将含数组的YAML转换为指定格式CSV?
将多层嵌套数组的YAML转换为指定格式CSV的yq解决方案
需求说明
需要把包含多层数组结构的YAML文件,转换为每行包含组织名,项目名,Feed名的CSV格式。
示例YAML
ProductLine: ProductLineName: aa ADO_FeedsList: - organizationName: bb Project: - ProjectName: cc ProjectFeedsName: - dd - ee - ProjectName: ff ProjectFeedsName: - gg - hh OtherInfo: N/A
期望CSV输出
bb,cc,dd bb,cc,ee bb,ff,gg bb,ff,hh
之前尝试的问题
- 命令1仅遍历到项目层级,未展开每个项目下的Feed列表,因此只输出了组织名和项目名的组合。
- 命令2错误地同时遍历所有项目名和所有Feed,导致字符串与数组相加,触发类型不匹配错误。
正确的yq命令
通过变量存储上级层级字段,嵌套遍历下级数组,确保每个Feed都能和对应的组织名、项目名配对:
yq -o csv '.ProductLine.ADO_FeedsList[] | ( .organizationName as $org | .Project[] | ( .ProjectName as $proj | .ProjectFeedsName[] | [$org, $proj, .] ) )' test.yaml
命令解释
.ProductLine.ADO_FeedsList[]:遍历每个组织条目.organizationName as $org:将当前组织名存入变量$org.Project[]:遍历当前组织下的每个项目.ProjectName as $proj:将当前项目名存入变量$proj.ProjectFeedsName[]:遍历当前项目下的每个Feed[$org, $proj, .]:将三个字段组合成数组,最终由yq转换为CSV行
运行结果
执行上述命令后,会输出完全符合期望的CSV内容。
内容的提问来源于stack exchange,提问作者Clair
相关产品推荐
相关产品推荐

