атрибут совокупного массива и преобразовать в CSV - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть следующий файл (vms.json), который я пытаюсь преобразовать в CSV при добавлении элемента размера диска.

vms.json

    {
"vms": [
{
  "hostname": "host1",
  "state": "running",
  "platform": "linux",
  "Disks": [
    {
      "index": 1,
      "volume_name": "/boot",
      "size": "34359738368"
    },
    {
      "index": 2,
      "volume_name": "/data",
      "size": "27917287424"
    }
 ]
},
{
  "hostname": "host2",
  "state": "running",
  "platform": "linux",
  "Disks": [
    {
      "index": 1,
      "volume_name": "/boot",
      "size": "34359738368"
    },
    {
      "index": 2,
      "volume_name": "/user_data",
      "size": "5159324276"
    },
    {
      "index": 3,
      "volume_name": "/temporary",
      "size": "102400"
    }
  ]
}
]
}

vms.csv

hostname,state,platform,Disks
host1,running,linux,62277025792
host2,running,linux,39519165044

Я хотел бы использовать jq для выполнения этого преобразования, однако Как этого добиться, используя фильтр jq и @csv?

1 Ответ

0 голосов
/ 06 ноября 2018

Учитывая ваш ввод и вызов jq с опцией -r, следующий фильтр:

 .vms[]
| [.hostname, .state, .platform, (.Disks | map(.size|tonumber) | add)]
| join(",")

производит:

host1,running,linux,62277025792
host2,running,linux,39519165044

Добавление заголовков и изучение того, что происходит, когда join(",") заменяется на @csv, оставлены в качестве упражнений: -)

...