##jqコマンドめも
・コマンドで指定するときの.(ドット)は項目名を表している
・コマンドで指定するときは項目を並べることで階層をたどっている(ドキュメントルートでいう/みたいな)
例えば $ jq -r '.foo.bar[]'
でbar以下の情報までたどる
参考:http://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af
元データはこれ(ネットでひろったやつ)
{
"foo": {
"bar": [
{
"key": "1-key",
"value": "1-value"
},
{
"key": "2-key",
"value": "2-value",
"option": "2-opt"
}
],
"baz": [
{
"key": "3-key",
"value": "3-value",
"option": "3-opt"
},
{
"key": "4-key",
"value": "4-value"
}
]
}
}
スクリプト用データとしてCSV出力がしたい場合
$ cat sample.json | jq -r '.foo.bar[]'
{
"key": "1-key",
"value": "1-value"
}
{
"key": "2-key",
"value": "2-value",
"option": "2-opt"
}
要素を指定して表示させる
$ cat sample.json | jq -r '.foo.bar[]|[.key, .value]'
[
"1-key",
"1-value"
]
[
"2-key",
"2-value"
]
###[]番目の配列として表示(配列に入れる)
$ cat sample.json | jq -r '.foo.bar[0]|[.key, .value]'
[
"1-key",
"1-value"
]
###配列に入れてcsvで出力
$ cat sample.json | jq -r '.foo.bar[0]|[.key, .value]|@csv'
"1-key","1-value"
$ cat sample.json | jq -r '.foo.bar[]|[.key, .value]|@csv'
"1-key","1-value"
"2-key","2-value"
###csvで出力したものをawkで成形
$ awk -F, '{print ($1)}'
これでcsvの1列目だけを表示する
$ cat sample.json | jq -r '.foo.bar[]|[.key, .value]|@csv' | awk -F, '{print $1}'
"1-key"
"2-key"
$ cat sample.json | jq -r '.foo.bar[]|[.key, .value]|@csv' | awk -F, '{print $1,$2}'
"1-key" "1-value"
"2-key" "2-value"
### ""が邪魔なのでsedで置き換える
$ cat sample.json | jq -r '.foo.bar[]|[.key, .value]|@csv' | awk -F, '{print $1,$2}' | sed -e 's/"//g'
1-key 1-value
2-key 2-value
$ cat sample.json | jq -r '.foo.baz[]|[.key, .value]|@csv' | awk -F, '{print $1,$2}' | sed -e 's/"//g'
3-key 3-value
4-key 4-value
.foo.barじゃなくて.foo.bazをとりたい
$ cat sample.json | jq -r '.foo[]'
[
{
"key": "1-key",
"value": "1-value"
},
{
"key": "2-key",
"value": "2-value",
"option": "2-opt"
}
]
[
{
"key": "3-key",
"value": "3-value",
"option": "3-opt"
},
{
"key": "4-key",
"value": "4-value"
}
]
$ cat sample.json | jq -r '.foo[][]'
{
"key": "1-key",
"value": "1-value"
}
{
"key": "2-key",
"value": "2-value",
"option": "2-opt"
}
{
"key": "3-key",
"value": "3-value",
"option": "3-opt"
}
{
"key": "4-key",
"value": "4-value"
}
$ cat sample.json | jq -r '.foo[][] | [.key , .value , .option] | @csv'
"1-key","1-value",
"2-key","2-value","2-opt"
"3-key","3-value","3-opt"
"4-key","4-value",