如何解决如何使用 (Go) yq 将 YAML 文档缩减为所需的一组键并生成 CSV?
我有以下 YAML 文档:
222:
description:
en: "124098-en"
fr: "498438-fr"
name:
en: "293878-en"
fr: "222493878-fr"
mass: 0.1
groupID: "24902"
223:
description:
en: "124098-en"
fr: "498438-fr"
name:
en: "zz325-en"
fr: "222493878-fr"
mass: 0.1
groupID: "234988"
[many other records]
我想构建一个如下所示的 CSV:
222,"293878-en","24902"
223,"zz325-en","234988"
也就是说,每一行只是:
- 第一个字段:原始文档中地图的key
- 第二个字段:来自原始文档的
.[].name.en
- 第三个字段:来自原始文档的
.[].groupID
原始文档的 CSV 中没有保留其他字段。
这样做的正确方法是什么?
附录:我使用的是 yq (4.7.1) 的 Go 版本,但是 Go 或 Python 版本都可以,或者如果这不是正确的工具,我很高兴使用别的东西。
解决方法
Python yq
版本使用起来更加直接,因为它实际上使用了 jq
来操作从 YAML 转换而来的 JSON。
您可以使用 jq
的构造并获得 CSV 结果
yq -r 'keys_unsorted[] as $k | [ ($k|tonumber),(.[$k] | .name.en,.groupID) ] | @csv' yaml
@csv
函数将数组中收集的元素放入源中最初编码的本机类型。如果 groupID
旨在存储为字符串,则可以将其作为 .groupID | tostring
Go yq
在 v4 之前非常独特,当时它使用自己的 DSL,但现在 v4.8
它非常努力地实现 jq
的功能。它没有开箱即用的 CSV 功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。