Не могу поместить вывод JSON в формат CSV с помощью jq - PullRequest
0 голосов
/ 13 декабря 2018

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

Первая команда дает значения, которые я ищу, используя jq:

aws ec2 describe-volumes | jq -r '.Volumes[] | .VolumeId, .AvailabilityZone, .Attachments[].InstanceId, .Attachments[].State, (.Tags // [] | from_entries.Name)'

Дает вывод, который я хочу, следующим образом:

MIAPRBcdm0002_test_instance
vol-0105a1678373ae440
us-east-1c
i-0403bef9c0f6062e6
attached
MIAPRBcdwb00000_app1_vpc
vol-0d6048ec6b2b6f1a4
us-east-1c
MIAPRBcdwb00001 /carbon
vol-0cfcc6e164d91f42f
us-east-1c
i-0403bef9c0f6062e6
attached

Однако, если я переведу его в формат CSV, чтобы я мог вывести переменную на электронную таблицу, команда перестанет работать и не будет работать:

aws ec2 describe-volumes | jq -r '.Volumes[] | .VolumeId, .AvailabilityZone, .Attachments[].InstanceId, .Attachments[].State, (.Tags // [] | from_entries.Name)| @csv'
jq: error (at <stdin>:4418): string ("vol-743d1234") cannot be csv-formatted, only array

Даже положитьверхний уровень JSON в формате CSV не выполняется для томов EBS:

aws ec2 describe-volumes | jq -r '.Volumes[].VolumeId | @csv'
jq: error (at <stdin>:4418): string ("vol-743d1234") cannot be csv-formatted, only array

Вот файл JSON FILE AWS EBS Тома, с которым я работаю, с этими командами (файл имеетбыл очищен от идентификаторов компании, но действителен для json).

Как я могу получить этот json в формате CSV, используя jq?

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете применять @csv только к содержимому массива, просто заключите свой фильтр в [..], как показано ниже

jq -r '[.Volumes[] | .VolumeId, .AvailabilityZone, .Attachments[].InstanceId, .Attachments[].State, (.Tags // [] | from_entries.Name)]|@csv'

Использование вышеприведенного может по-прежнему сохранять кавычки, поэтому использование join() будетздесь тоже подойдет

jq -r '[.Volumes[] | .VolumeId, .AvailabilityZone, .Attachments[].InstanceId, .Attachments[].State, (.Tags // [] | from_entries.Name)] | join(",")'
...