首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jq打印多个结果

如何使用jq打印多个结果
EN

Stack Overflow用户
提问于 2020-07-27 18:43:13
回答 1查看 56关注 0票数 0

我有一个来自HPE OneView的JSON输出。一个简短的例子是:

代码语言:javascript
复制
{
   "uri": "/rest/server-hardware/*/firmware?start=0&count=32",
   "total": 102,
   "start": 0,
   "prevPageUri": null,
   "type": "sever-firmwareinventory-list-1",
   "category": "server-hardware",
   "count": 32,
   "members": [
     {
         "uri": "/rest/server-hardware/37383638-5A43-3338-313356585742/firmware",
         "type": "server-hardware-firmware-1",
         "category": "server-hardware",
         "serverHardwareUri": "/rest/server-hardware/37383638-5A43-3338-313356585742",
         "serverName": "bb-r2-n12-ilo",
         "serverModel": "Proliant DL380 Gen10",
         "components": [
           {
               "componentVersion": "4.0.4.288",
               "componentLocation": "System Board",
               "componentName": "Server Platform Services (SPS) Firmware",
               "componentKey": "b34e5677-21dc-45d3-872b-42f76fee9053"
           },
           {
               "componentVersion": "U30 v1.46 (10/02/2018)",
               "componentLocation": "System Board",
               "componentName": "System ROM",
               "componentKey": "aa148d2e-6e09-453e-bc6f-62baa5f5ccc4"
               
           }
       ],
       "created": "2020-07-26T22:01:54.679Z"
     },
     {
         "uri": "/rest/server-hardware/37383638-5A43-3338-313052304C4A/firmware",
         "type": "server-hardware-firmware-1",
         "category": "server-hardware",
         "serverHardwareUri": "/rest/server-hardware/37383638-5A43-3338-313052304C4A",
         "serverName": "bb-r5-n10-ilo",
         "serverModel": "Proliant DL380 Gen10",
         "components": [
           {
               "componentVersion": "4.1.4.296",
               "componentLocation": "System Board",
               "componentName": "Server Platform Services (SPS) Firmware",
               "componentKey": "b34e5677-21dc-45d3-872b-42f76fee9053"
           },
           {
               "componentVersion": "U30 v1.36 (02/15/2018)",
               "componentLocation": "System Board",
               "componentName": "System ROM",
               "componentKey": null
               
           }
       ],
       "created": "2020-07-26T22:01:54.679Z"
     },
     {
         "uri": "/rest/server-hardware/37313438-3033-5A43-3338-30384D533730/firmware",
         "type": "server-hardware-firmware-1",
         "category": "server-hardware",
         "serverHardwareUri": "/rest/server-hardware/37313438-3033-5A43-3338-30384D533730",
         "serverName": "bb-r3-n1-ilo",
         "serverModel": "Proliant DL560 Gen10",
         "components": [
           {
               "componentVersion": "4.1.4.296",
               "componentLocation": "System Board",
               "componentName": "Server Platform Services (SPS) Firmware",
               "componentKey": "b34e5677-21dc-45d3-872b-42f76fee9053"
           },
           {
               "componentVersion": "U34 v2.10 (05/21/2019)",
               "componentLocation": "System Board",
               "componentName": "System ROM",
               "componentKey": "aa148d2e-6e08-453e-bc6f-63baa5f5ccc4"
               
           }
       ],
       "created": "2020-07-26T22:01:54.679Z"
     }
   ],
   "modified": "2020-07-27T09:30:55.882Z",
   "nextPageUri": null
}

我知道我可以使用:jq -r '.members[] | select(.serverModel == "Proliant DL380 Gen10") | .components[] | select(.componentName == "System ROM") |.componentVersion' firmware来检索DL380 Gen 10s的系统只读存储器版本,但我也想打印serverName和系统只读存储器版本。我尝试的每一件事都会出现错误。有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-27 19:46:01

构建字符串是一个很好的技巧。如果有帮助,您还可以构建中间对象,以便以更容易理解的形式显示内容。例如:

代码语言:javascript
复制
$ cat stuff.jq
.members[]
   | select(.serverModel == "Proliant DL380 Gen10")
   | {
       name: .serverName,
       rom: ( .components[] | select(.componentName == "System ROM") | .componentVersion )
       }
   | "The ROM version for \(.name) is \(.rom)"

这将输出以下内容:

代码语言:javascript
复制
$ jq -rf stuff.jq firmware.json 
The ROM version for bb-r2-n12-ilo is U30 v1.46 (10/02/2018)
The ROM version for bb-r5-n10-ilo is U30 v1.36 (02/15/2018)
$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63113661

复制
相关文章

相似问题

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