@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

フラットなJSONオブジェクトをjqコマンドでヘッダ行付きのCSVにする

aws cliでフィルタした配列をいい感じにCSVにして、エクセルに貼り付けたかった。

キーがたくさんあるし、値があったりなかったりするので、いちいち配列の形でキーを列挙したくなかった。

この回答の通り。

stackoverflow.com

jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'

aws コマンドと組み合わせるとこんな感じ

前の記事も参考に、Nameタグを上位に上げて、キーTagsのオブジェクトを消してから丸ごとCSVにする感じ

peccu.hatenablog.com

$ aws ec2 describe-addresses \
  | jq -r '[
    .Addresses[] 
      | (.Tags[]? | select( .Key=="Name") | .Value) as $name
      | del(.Tags)
      | . + {Name: $name} 
    ] 
    | (map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'

"AllocationId","AssociationId","Domain","InstanceId","Name","NetworkBorderGroup","NetworkInterfaceId","NetworkInterfaceOwnerId","PrivateIpAddress","PublicIp","PublicIpv4Pool"
"eipalloc-12345","eipassoc-12345","vpc",,"EIP-NAME","ap-northeast-1","eni-12345","12345","10.0.0.10","123.123.123.123","amazon"