次のクエリがあります。
curl -s \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_TOKEN" \
--data "$(echo $PAYLOAD)" \
https://myapi/client/v4/graphql/ | jq .
...次のような出力が生成されます。
{
"data": {
"viewer": {
"accounts": [
{
"magicTransitTunnelTrafficAdaptiveGroups": [
{
"avg": {
"bitRateFiveMinutes": 23360
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "nw-blue"
}
},
{
"avg": {
"bitRateFiveMinutes": 8960
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "mtlab_gcp1"
}
},
{
"avg": {
"bitRateFiveMinutes": 95493
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "Cherry_CBE_1"
}
},
{
"avg": {
"bitRateFiveMinutes": 2968507
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "Cherry_VCB"
}
},
{
"avg": {
"bitRateFiveMinutes": 10880
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "accelia-poc1"
}
},
{
"avg": {
"bitRateFiveMinutes": 21227
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "mtlab_sr_pni"
}
},
{
"avg": {
"bitRateFiveMinutes": 27627
},
"dimensions": {
"datetimeFiveMinutes": "2022-12-30T09:00:00Z",
"tunnelName": "mtlab-tme-gcp1"
}
}
]
}
]
}
},
"errors": null
}
bitRateFiveMinutes
すべての値を解析して追加し、評価のために変数に入力したいと思います。このオプションを使用してこれを行うにはどうすればよいですかjq -r
?上記の例を見るとhttps://stedolan.github.io/jq/manual/しかし、何を使うべきかわかりません。+
私のために追加のタスクを実行する組み込み演算子があるようです。
答え1
ここでは、必要な値へのフルパスを作成する必要がないように、いくつかの近道を選びました。値を配列に入れて実行してadd
要約します。
curl -s ... |
jq '[ .data[][][][][].avg.bitRateFiveMinutes ] | add'
あなたの質問の例が与えられた場合、整数は文字列としてエンコードされないので、3156054
ここで使用jq
するオプションは必要ありません。-r
より詳細なjq
コマンドは次のとおりです。
curl -s ... |
jq '.data.viewer.accounts |
map(.magicTransitTunnelTrafficAdaptiveGroups |
map(.avg.bitRateFiveMinutes) | add) | add'
まず、各配列のすべての項目の合計を計算magicTransitTunnelTrafficAdaptiveGroups
し、これらの小計を一緒に追加します。あなたの例には1つの内部配列しかありません。
結果をシェル変数に入れることは、コマンド置換でパイプを実行し、それを変数に割り当てる問題です。
avgsum=$(
curl -s ... |
jq '[ .data[][][][][].avg.bitRateFiveMinutes ] | add'
)
--data "$(echo $PAYLOAD)"
--data "$PAYLOAD"
$PAYLOAD
また、シェルが、および引用符で囲まれていない値に対して分割およびファイル名のグロービングを実行し、およびecho
特別な処理を実行する必要がない限りで作成するのが最善です。\n
\t
\\