我正在尝试编写一个简单的脚本来使用'jq‘输出一个包含亚马逊网络服务EC2实例信息(实例id、ip、名称)的表。
然而,在我们的环境中,一些实例没有任何与之关联的标记,所以当我运行我的脚本时,我得到了一个错误,此时jq在迭代数组的其余元素之前停止处理:
$ aws ec2 describe-instances | \
jq -r '.Reservations[].Instances[] | (.Tags | from_entries) as $tags | "\(.InstanceId) \(.PrivateIpAddress) \($tags.Name)"'
i-0664dc6c236767b4e 10.177.99.141 foo
i-02077630c093d65dc 10.177.99.85 bar
jq: error (at <stdin>:2108): Cannot iterate over null (null)
有没有一种方法可以过滤掉不存在的标签,并用占位符值代替名称(如'-'),以避免这个错误并产生干净的输出?
发布于 2021-07-23 12:27:16
要忽略这些实例,可以使用.Tags // empty
,如下所示:
jq -r '.Reservations[].Instances[]
| ((.Tags // empty) | from_entries) as $tags
| "\(.InstanceId) \(.PrivateIpAddress) \($tags.Name)"'
添加占位符值的一种方法是使用if ... then ... else ... end
结构,例如
jq -r '
.Reservations[].Instances[]
| (if .Tags then (.Tags | from_entries).Name else "-" end) as $name
| "\(.InstanceId) \(.PrivateIpAddress) \($name)"'
如果您需要更多详细信息,请访问minimal complete verifiable example guidelines。
https://stackoverflow.com/questions/68493809
复制相似问题