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

使用 yq 将对象添加到现有字段

如何解决使用 yq 将对象添加到现有字段

我有以下 yaml 文件

some:
  fields: ...
# ...

images:
  image_1:
    name: "some-name"
    value: 1111
# ...

some:
  other-fields: ...

我想使用与 image_1 相同的模板添加生成的对象:

image_<no>:
  name: "<name>"
  value: <value>

我已经找到了如何使用 yq 构建对象,但是我在将其添加到现有字段 (images) 的最后一个元素下时遇到了问题。我用来构建对象的简化脚本。

yq eval '{"image_no": {"name": "my_name",value: 1111}' myfile.yml

解决方法

使用 yq 可以轻松解决您的任务。

bash 脚本显示了两个略有不同的版本:

  1. 在版本 1 中,三个参数 imageNo namevalue 被传递给 yq
  2. 在版本 2 中,参数 imageNo 是在脚本中根据当前图像数量计算的。
#!/bin/bash

FILE='
some:
  fields: "value"

images:
  image_1:
    name: "some-name"
    value: 1111
  image_2:
    name: "some-name-2"
    value: 1112
  image_3:
    name: "some-name-3"
    value: 1113

some:
  other-fields: "other-value"
'

echo adding new image to yaml - version 1
yq -y --argjson imageNo 4 --arg name "my_name" --argjson value 1114 '
  .images += { 
               "image_\($imageNo)":
               { 
                 name: $name,value: $value
               }
             }' <<< "$FILE"

echo adding new image to yaml - version 2
yq -y --arg name "my_name" --argjson value 1114 '
  (.images | keys | length + 1) as $imageNo
  | .images += { 
                 "image_\($imageNo)":
                   { 
                     name: $name,value: $value
                   }
               }' <<< "$FILE"

output 版本 1 和版本 2

some:
  other-fields: other-value
images:
  image_1:
    name: some-name
    value: 1111
  image_2:
    name: some-name-2
    value: 1112
  image_3:
    name: some-name-3
    value: 1113
  image_4:
    name: my_name
    value: 1114

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。