AWSのクラウド環境をコマンドラインから操作するために、awsコマンドというものがあります。
検索系のコマンドの場合、jsonで形式で出力させたうえでjqコマンドで必要な情報のみ抽出することが多いのですが、jqコマンドを初めて使う場合、使い方が分からずに戸惑うことも多いです。
そこで、今回はjqコマンドの基本的な使い方を説明します。
サンプルのファイル
今回使うファイルは、非常に簡単な下記のjson.txtファイルを使用します。
more json.txt
{"key1": 1, "key2": 2}
{"key1": 10, "key2": 20}
入力をそのまま返す
jqコマンドをオプションなしで実行すると、そのまま返されます。
改行などは行われていますが、jsonファイルとしては同じ意味の内容を返してきています。
cat json.txt | jq
{
"key1": 1,
"key2": 2
}
{
"key1": 10,
"key2": 20
}
key1だけをhashとして返す
"{}"でキー名を指定すると、指定したキーの情報のみがフィルタリングされて、jsonのハッシュ構造で返されます。
cat json.txt | jq -r '{key1}'
{
"key1": 1
}
{
"key1": 10
}
hashではなくarrayとして返す
"{}"ではなく"[]"で括ると、結果が配列で返されます。今回は、key1とkey2を指定しているので、両方が返ってきています。
cat json.txt | jq -r '[.key1, .key2]'
[
1,
2
]
[
10,
20
]
jsonではなく、tsvで返す
"("と")"でキーを囲んだうえで全体を、ダブルクオートすると、jsonではなく指定されたフォーマットで返されます。
2つの項目の間に、タブ(\t)を指定しているため、結果的にtsv形式になります。
key1, key2をtab区切りで値だけ返す
cat json.txt | jq -r '"\(.key1)\t\(.key2)"'
1 2
10 20
タブではなく任意の文字を出力させる
先ほどはタブを直接出力しましたが、任意の文字を指定できます。以下のように同じキーを2回指定することも可能です。
cat json.txt | jq -r '"key1は\(.key1)で、key2は\(.key2)です。2回出力もできる\(.key1)"'
key1は1で、key2は2です。2回出力もできる1
key1は10で、key2は20です。2回出力もできる10
こちらもおススメ