Список номеров является недопустимым выводом для CSV в JQ - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно получить список изображений Amazon, созданных компанией.Это войдет в переменную, которую я положу в формате csv и выведу на электронную таблицу.

Мне нужно учитывать идентификатор изображения и размер томов, прикрепленных к нему.

Если я попробую эту команду:

cat ab-prod-images.json |  jq -r '.Images[] | [.ImageId, ([.BlockDeviceMappings[].Ebs.VolumeSize])] | @csv'

Это ошибка, которую я получаю:

jq: error (at <stdin>:53471): array ([100,5,10,2...) is not valid in a csv row

Я сохраняю вывод этой команды в переменной, которую я буду использовать длявывод на электронную таблицу.

Я хочу, чтобы список размеров томов, разделенных запятыми, отображался в той же ячейке электронной таблицы.

Это пример json, который я использую:

{
"Images": [
    {
        "VirtualizationType": "hvm",
        "Description": "TRAN05-12-13-2018",
        "Hypervisor": "xen",
        "ImageId": "ami-000bd263d51e443f2",
        "State": "available",
        "BlockDeviceMappings": [{
                "DeviceName": "/dev/sda1",
                "Ebs": {
                    "SnapshotId": "snap-0f1076dce3103833f",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 100,
                    "Encrypted": false
                }
            },
            {
                "DeviceName": "/dev/sdi",
                "Ebs": {
                    "SnapshotId": "snap-0c7d71a9d3887a048",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 5,
                    "Encrypted": false
                }
            },
            {
                "DeviceName": "/dev/sdg",
                "Ebs": {
                    "SnapshotId": "snap-00402196b9e023a72",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 10,
                    "Encrypted": false
                }
            },
            {
                "DeviceName": "/dev/sdk",
                "Ebs": {
                    "SnapshotId": "snap-05f65a62735de2846",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 20,
                    "Encrypted": false
                }
            },
            {
                "DeviceName": "/dev/sdj",
                "Ebs": {
                    "SnapshotId": "snap-0d350170b9d5c62bb",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 40,
                    "Encrypted": false
                }
            },
            {
                "DeviceName": "/dev/sdh",
                "Ebs": {
                    "SnapshotId": "snap-04679d09d89609e79",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 30,
                    "Encrypted": false
                }
            },
            {
                "DeviceName": "/dev/sdf",
                "Ebs": {
                    "SnapshotId": "snap-0b5f861fd93da6b20",
                    "DeleteOnTermination": true,
                    "VolumeType": "gp2",
                    "VolumeSize": 5,
                    "Encrypted": false
                }
            }
        ],
        "Architecture": "x86_64",
        "ImageLocation": "155775729998/AB-P-RIDD-TRAN05-12-13-2018",
        "RootDeviceType": "ebs",
        "OwnerId": "123456789101",
        "RootDeviceName": "/dev/sda1",
        "CreationDate": "2018-12-14T01:39:31.000Z",
        "Public": false,
        "ImageType": "machine",
        "Name": "TRAN05-12-13-2018"
    }
]

}

Вот полный и полный json, который я пытаюсь использовать: FULL JSON

Как я могу получить список VolumeSizes для перехода в ту же ячейку в создаваемой мной электронной таблице?

1 Ответ

0 голосов
/ 14 декабря 2018
Вход

@csv должен быть плоским массивом, но ваш фильтр (.Images[] | [.ImageId, ([.BlockDeviceMappings[].Ebs.VolumeSize])]) создает вложенный массив, потому что вы помещаете размеры томов в подмассив ( [.BlockDeviceMappings[].Ebs.VolumeSize]):

$ jq -rc '.Images[] | [.ImageId, ([.BlockDeviceMappings[].Ebs.VolumeSize])]' file.json 
["ami-000bd263d51e443f2",[100,5,10,20,40,30,5]]

Итак, вместо этого используйте следующую команду.

jq -r '.Images[] | [ .ImageId, .BlockDeviceMappings[].Ebs.VolumeSize ] | @csv' ab-prod-images.json

, которая дает:

"ami-000bd263d51e443f2",100,5,10,20,40,30,5
...