首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理'aws | jq‘命令中缺少的标签(jq:错误不能迭代通过null)

处理'aws | jq‘命令中缺少的标签(jq:错误不能迭代通过null)
EN

Stack Overflow用户
提问于 2021-07-23 03:48:00
回答 1查看 87关注 0票数 0

我正在尝试编写一个简单的脚本来使用'jq‘输出一个包含亚马逊网络服务EC2实例信息(实例id、ip、名称)的表。

然而,在我们的环境中,一些实例没有任何与之关联的标记,所以当我运行我的脚本时,我得到了一个错误,此时jq在迭代数组的其余元素之前停止处理:

代码语言:javascript
运行
复制
$ 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)

有没有一种方法可以过滤掉不存在的标签,并用占位符值代替名称(如'-'),以避免这个错误并产生干净的输出?

EN

回答 1

Stack Overflow用户

发布于 2021-07-23 12:27:16

要忽略这些实例,可以使用.Tags // empty,如下所示:

代码语言:javascript
运行
复制
jq -r '.Reservations[].Instances[]
  | ((.Tags // empty) | from_entries) as $tags
  | "\(.InstanceId)  \(.PrivateIpAddress)  \($tags.Name)"'

添加占位符值的一种方法是使用if ... then ... else ... end结构,例如

代码语言:javascript
运行
复制
jq -r '
.Reservations[].Instances[]
  | (if .Tags then (.Tags | from_entries).Name else "-" end) as $name
  | "\(.InstanceId)  \(.PrivateIpAddress)  \($name)"'

如果您需要更多详细信息,请访问minimal complete verifiable example guidelines

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68493809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档