微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 (Go) yq 将 YAML 文档缩减为所需的一组键并生成 CSV?

如何解决如何使用 (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 举报,一经查实,本站将立刻删除。