(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】jqコマンドで複数項目を取得する構文

スポンサーリンク

はじめに

JSON形式のファイルから値を取り出すjqコマンドは以下にて紹介しています。

その応用として複数の項目を取り出す際のjqコマンドの使い方について解説します。

環境情報
  • Debian GNU/Linux 9 (stretch)
  • jq-1.5

jqコマンドの基本的な使い方

例えば以下のようなJSONファイルがあった時に

{"Items":[{"Item":"itemName":"..","itemPrice":"10516","genreId":"201998","pointRateStartTime":"",...

以下のようにすればそれぞれの値が抜き出せます。

# cat hoge.json | jq .Items[0].Item.genreId
"201998"
# cat hoge.json | jq .Items[0].Item.itemPrice
"10516"

jqコマンドの引数はjidコマンドで確認できます。

複数の値を抜き出す

値をカンマ区切りで記載すれば値が複数行となる形で表示されます。

# cat hoge.json | jq .Items[0].Item.genreId,.Items[0].Item.itemPrice
"201998"
"10516"

そして引数を[]で囲めば[ , ]形式で表示され

# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]"
[
  "201998",
  "10516"
]

末尾に|@csv@tsvとすれば区切り文字を入れて一行に表示可能です。

# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]|@csv"
"\"201998\",\"10516\""
# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]|@tsv"
"201998\t10516"

ダブルクォーテーションとタブは以下で外すことが可能です。\tの置換をカンマにしていますがここは任意の値を指定できます。

# cat hoge.json | jq "[.Items[0].Item.genreId,.Items[0].Item.itemPrice]|@tsv" | sed -e 's/\"//g' | sed -e 's/\\t/,/g'
201998,10516

終わりに

値をカンマで区切れば改行が入るものの複数の値が取得できる点は覚えておくと役立ちます。また、@csv@htmlといった出力形式の指定も便利です。

詳細は以下の公式マニュアルを参照ください。

以上、ご参考になれば幸いです。