将一个文件中的值添加到另一个文件中的列表中
Adding values from one file into a list in another file
使用 Mike Farah's YQ,我试图将标准输入中的某些值合并到文件中的列表中。
我目前使用的命令是:
yq ea -i '(select(fi==0).masterZones) += [(select(fi==1).AvailabilityZones[].ZoneName)]' test.txt -
为简洁起见,test.txt 中不存在 masterZones。标准输入的截断版本是:
AvailabilityZones:
- GroupName: us-east-1
ZoneName: us-east-1a
- GroupName: us-east-1
ZoneName: us-east-1b
- GroupName: us-east-1
ZoneName: us-east-1c
我的输出类似于:
a: foo
b: bar
masterZones:
- us-east-1a
- us-east-1b
- us-east-1c
---
AvailabilityZones:
- GroupName: us-east-1
ZoneName: us-east-1a
- GroupName: us-east-1
ZoneName: us-east-1b
- GroupName: us-east-1
ZoneName: us-east-1c
我想了解如何只添加列表,以及为什么它将标准输入附加到文件中,而不只是我的 select 子句。我觉得我想做的事情需要一些 ireduce 魔法,这有点超出我的想象,但也许我只是在 eval 中遗漏了一些东西——将整个 stdin 附加到我的文件中的所有东西?
如果您打算在 test.txt
上新创建 masterZones
或完全覆盖其中存在的值,您可以这样做
yq ea '
(
(
select(fi==0).AvailabilityZones[].ZoneName ) as $item ireduce([]; . + $item
)
) as $ma
| select(fi == 1) | .masterZones += $ma ' - test.txt
想法是将来自标准输入的区域名称值存储到一个数组中(整个操作使用 ireduce
),并在测试文件上创建一个新路径 masterZones
来更新数组值。
使用 Mike Farah's YQ,我试图将标准输入中的某些值合并到文件中的列表中。
我目前使用的命令是:
yq ea -i '(select(fi==0).masterZones) += [(select(fi==1).AvailabilityZones[].ZoneName)]' test.txt -
为简洁起见,test.txt 中不存在 masterZones。标准输入的截断版本是:
AvailabilityZones:
- GroupName: us-east-1
ZoneName: us-east-1a
- GroupName: us-east-1
ZoneName: us-east-1b
- GroupName: us-east-1
ZoneName: us-east-1c
我的输出类似于:
a: foo
b: bar
masterZones:
- us-east-1a
- us-east-1b
- us-east-1c
---
AvailabilityZones:
- GroupName: us-east-1
ZoneName: us-east-1a
- GroupName: us-east-1
ZoneName: us-east-1b
- GroupName: us-east-1
ZoneName: us-east-1c
我想了解如何只添加列表,以及为什么它将标准输入附加到文件中,而不只是我的 select 子句。我觉得我想做的事情需要一些 ireduce 魔法,这有点超出我的想象,但也许我只是在 eval 中遗漏了一些东西——将整个 stdin 附加到我的文件中的所有东西?
如果您打算在 test.txt
上新创建 masterZones
或完全覆盖其中存在的值,您可以这样做
yq ea '
(
(
select(fi==0).AvailabilityZones[].ZoneName ) as $item ireduce([]; . + $item
)
) as $ma
| select(fi == 1) | .masterZones += $ma ' - test.txt
想法是将来自标准输入的区域名称值存储到一个数组中(整个操作使用 ireduce
),并在测试文件上创建一个新路径 masterZones
来更新数组值。