コマンドラインでJSONを操作するjqコマンドが便利なのでメモ。
まずは俺のUbuntuにインストール。
sudo apt install jq -y
1.必要な要素だけ取り出す
例えばAWSのIPアドレス一覧から 東京リージョンのEC2のIPレンジだけ抜き取りたい場合はこうする。
curl https://ip-ranges.amazonaws.com/ip-ranges.json |jq -r '.prefixes[]|select(.region=="ap-northeast-1")|select(.service=="EC2")|.ip_prefix'|sort -n > ip.txt
出力されたip.txtの中身はこうなる。
3.112.0.0/14 13.112.0.0/14 13.230.0.0/15 15.177.79.0/24 15.193.1.0/24 #以下略
何をやってるかというと、ip-ranges.jsonのprefixes要素の中にあるip_prefix要素にIPレンジが入ってる。
これをjqコマンドで取り出して、さらにjqのフィルタ機能を使う。
条件はregionがap-northeast-1で、serviceがEC2というもの。
さらに数値ソートしたものをip.txtに保存する。
2.CSVに変換する
CSV変換機能も便利だ。
これまた先のip-ranges.jsonを ip_prefix, region, service, network_border_group の順番ですべてCSV化するならこうだ。
curl https://ip-ranges.amazonaws.com/ip-ranges.json |jq -r '.prefixes[]|[.ip_prefix, .region, .service, .network_border_group]|@csv' > ip.csv
出力されたip.csvの中身はこうなる。
"35.180.0.0/16","eu-west-3","AMAZON","eu-west-3" "52.94.76.0/22","us-west-2","AMAZON","us-west-2" "52.95.36.0/22","ap-southeast-2","AMAZON","ap-southeast-2" "120.52.22.96/27","GLOBAL","AMAZON","GLOBAL" "150.222.81.0/24","eu-west-1","AMAZON","eu-west-1"
prefixes要素の中身を取り出して、
ip_prefix, region, service, network_border_group の順に配列したものを @csv コマンドでCSVにしている。
jq便利。