次のサンプルファイルがあります(非常に長いファイル、ここに短いサンプルがあります)。
"request_status" : "FAILED"
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/333",
"Requests" : {
"cluster_name" : "sys41",
"id" : 333,
"request_status" : "COMPLETED"
}
},
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/334",
"Requests" : {
"cluster_name" : "sys41",
"id" : 334,
"request_status" : "FAILED"
}
},
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/335",
"Requests" : {
"cluster_name" : "sys41",
"id" : 335,
"request_status" : "FAILED"
}
},
{
"href" : "http://localhost:8080/api/v1/clusters/sys41/requests/336",
"Requests" : {
"cluster_name" : "sys41",
"id" : 336,
"request_status" : "COMPLETED"
}
}
一致する行の後に行を印刷する方法、"id" : $num
例:
num=335
次の行を取得する方法
"id" : $num
期待される出力
"request_status" : "FAILED"
ベストアンサー1
JSONファイルが次のような大規模なオブジェクト配列であるとします。
{
"href": "http://localhost:8080/api/v1/clusters/sys41/requests/333",
"Requests": { "id": 333, "cluster_name": "sys41", "request_status": "COMPLETED" }
},
(改行は重要ではなく、オブジェクトのキー順序も重要ではありません。)その後、次のコマンドは次のものを取得しますjq
。request_status
id
$num
$ num=355
$ jq -r ".[].Requests | select(.id == $num).request_status" file.json
FAILED
これはRequests
、各オブジェクトからすべての項目を選択することによって行われますid
。フィルタを通過した項目についてrequest_status
。
-r
jq
JSONの代わりに生データを出力するオプションです(FAILED
このオプションがない場合は二重引用符で囲みます)。
報酬データ:
$ jq -r '.[].Requests | "\(.id): \(.request_status)"' file.json
333: COMPLETED
334: FAILED
335: FAILED
336: COMPLETED