Jsonを行ベースのデータ構造に展開する json2line
最近増えてきた json の扱いに困っていませんでしょうか? jqよくわからん、使い慣れたgrepやawkやperlのワンライナー使いたい。
そこで json2line を作りました。
https://github.com/nazoking/json2line
python 2.6 以上で動きます。たぶん
pip install https://github.com/nazoking/awsxx/wiki/dist/json2line-0.0.1.tar.gz
でインストール出来ます。
こんな感じ
$ aws ec2 describe-instances --filters name=tag:Name,values=ft02 | json2line --tsv -l Reservations.OwnerId 6765247xxxxx Reservations.ReservationId r-0c759cxx Reservations.Groups.GroupName hogehxxxx Reservations.Groups.GroupId sg-xxxxxx Reservations.Instances.Monitoring.State disabled Reservations.Instances.PublicDnsName ec2-123-224-111.ap-northeast-1.compute.amazonaws.com Reservations.Instances.KernelId aki-44992845 Reservations.Instances.State.Code 16 Reservations.Instances.State.Name running (中略) Reservations.Instances.AmiLaunchIndex 0 ResponseMetadata.RequestId c3cxxxxff-9xx-4axe-9xx0-f6a12f7axx
なのでgrepとかできます。
--help でオプション一覧出てきますが
--tsv でTSVっぽい
-l でリストのインデックスを表示しない
くらいをよく使うんじゃないでしょうか。
例えば awscli を使って Name:ft02 というタグのついたEC2インスタンスを route53 で hoge.example.com という名前で登録するには
route53 change_record hosted_zone_id hoge.example.com. CNAME `aws ec2 describe-instances --filters name=tag:Name,values=ft02 | json2line --tsv -l|awk '/PublicDnsName/{print $2}'`
という感じのワンライナーになります。
初めてくらいでpython書いたのでツッコミお願いします。