AWS_CLIでEC2インスタンスをリストアップする作業で、インスタンスのName
タグをCSVのカラムとして吐き出して欲しいという要望がありました。
その時の抽出用のスクリプトを整理した備忘録的な内容です。
jqコマンドとは
JSONデータを読み込んで特定のキーの要素を取り出したりすることができるコマンドです。
インストールはこちら→(https://stedolan.github.io/jq/download/)
サンプルデータを用いた例
データとして以下を用意しました。
sample.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{ "Products": { "List": [ { "Id": 1, "Code": "Product-A", "Created": "2021-02-01", "Tags": [ { "Key": "Name", "Value": "AAA" }, { "Key": "Type", "Value": "Box" } ] }, { "Id": 1, "Code": "Product-B", "Created": "2021-02-01", "Tags": [ { "Key": "Name", "Value": "BBB" }, { "Key": "Type", "Value": "Ball" } ] } ] } } |
取り出したいデータはProducts->List配下にあるId
,Code
とTagsのKeyが"Name"になっているオブジェクトのValue
とします
出力するコマンド
1 2 3 |
$ cat sample.json | jq '.Products.List[] | [.Id, .Code, (.Tags[] | select(.Key == "Name").Value) ] | @csv' | sed -E 's/[\"\\]//g' 1,Product-A,AAA 1,Product-B,BBB |
解説
[.Id, .Code, (.Tags[] | select(.Key == "Name").Value) ]
の部分にある
(.Tags[] | select(.Key == "Name").Value)
という記述でList配下にあるTagsの要素の中でKeyが"Name"のデータを選択してそのValueを取り出すようになっています。
最後に@csv
とつなげればCSVに変換されます。
最後のsed
では"
と\
を消しています。
システム管理やソフトウェア開発など、
実際の業務では欠かせないシェルスクリプトの知識を徹底解説
ほとんどのディストリビューションでデフォルトとなっているbashに特化することで、
類書と差別化を図るとともに、より実践的なプログラミングを紹介します。
またプログラミング手法の理解に欠かせないLinuxの仕組みについてもできるかぎり解説しました。
イマドキのエンジニア必携の一冊。