使用 jq 解析嵌套 oci 输出的数据

问题描述 投票:0回答:2

如何使用 jq 解析嵌套数组中的数据?我无法破译数组中对象的路径。我是这个领域的新手,YouTube 上的例子和我读过并尝试根据我的情况重新调整的无数问题仍然难以捉摸。感谢帮助。

oci 命令的清理输出如下:

[
  {
    "agent-config": null,
    "availability-config": {
      "is-live-migration-preferred": null,
      "recovery-action": "RESTORE_INSTANCE"
    },
    "availability-domain": "AD",
    "capacity-reservation-id": null,
    "compartment-id": "ocid1.compartment.",
    "dedicated-vm-host-id": null,
    "defined-tags": {},
    "display-name": "TEST-VM",
    "extended-metadata": null,
    "fault-domain": "FAULT-DOMAIN",
    "freeform-tags": {},
    "id": "ocid1.instance.",
    "image-id": "ocid1.image.",
    "instance-options": {
      "are-legacy-imds-endpoints-disabled": false
    },
    "ipxe-script": null,
    "launch-mode": "PARAVIRTUALIZED",
    "launch-options": {
      "boot-volume-type": "PARAVIRTUALIZED",
      "firmware": "BIOS",
      "is-consistent-volume-naming-enabled": false,
      "is-pv-encryption-in-transit-enabled": false,
      "network-type": "PARAVIRTUALIZED",
      "remote-data-volume-type": "PARAVIRTUALIZED"
    },
    "lifecycle-state": "STOPPED",
    "metadata": {
      "ssh_authorized_keys": "lots_of_random"
    },
    "platform-config": null,
    "preemptible-instance-config": null,
    "region": "2nd-reg",
    "shape": "Standard1.1",
    "shape-config": {
      "baseline-ocpu-utilization": null,
      "gpu-description": null,
      "gpus": null,
      "local-disk-description": null,
      "local-disks": null,
      "local-disks-total-size-in-gbs": null,
      "max-vnic-attachments": 2,
      "memory-in-gbs": 16.0,
      "networking-bandwidth-in-gbps": 24.6,
      "ocpus": 1.0,
      "processor-description": null
    },
    "source-details": {
      "boot-volume-size-in-gbs": null,
      "boot-volume-vpus-per-gb": null,
      "image-id": "ocid1.image.",
      "kms-key-id": null,
      "source-type": "image"
    },
    "system-tags": null,
    "time-created": "2022-10-27T19:43:33.651460+00:00",
    "time-maintenance-reboot-due": null
  },

我正在寻找显示名称、ID、GBS 内存。

我可以相对轻松地获得显示名称和 ID。

 jq -r '.data[] |."display-name", ."id"'

我也可以通过以下方式收集 GBS 内存。

jq -r '.data[] ."shape-config"."memory-in-gbs"'

我无法让他们在一起。上面的输出将包含每个虚拟机的上述数据的多次迭代。我将使用这些数据来构建其他查询,但我无法清除第一个障碍。

最终目标应该是这样的: 显示名称 ID 记忆

感谢帮助。

jq oracle-cloud-infrastructure
2个回答
0
投票

使用该结构的构造函数创建您希望收集它们的结构,并使用您已使用的引用将值分配到结构内的所需位置。

进入数组,例如,使用 数组构造函数

[]
:

.data[] | [ ."display-name", ."id", ."shape-config"."memory-in-gbs" ]
[
  "TEST-VM",
  "ocid1.instance.",
  16.0
]

演示

或者使用 对象构造函数

{}
:

.data[] | { name: ."display-name", id: ."id", gbs: ."shape-config"."memory-in-gbs" }
{
  "name": "TEST-VM",
  "id": "ocid1.instance.",
  "gbs": 16.0
}

演示


0
投票

您可以合并用逗号分隔的必要键/名称:

即:

jq -r '{name: .data[]."display-name", ocid: .data[]."id" }'
© www.soinside.com 2019 - 2024. All rights reserved.