组合JSON字段并使用jq添加值



我必须从一个站点聚合一些JSON结果。因为站点有查询并发限制和查询超时,所以必须划分查询的时间框架。所以我只剩下一个JSON如下:

{
"results": [
[
{
"field": "AccountId",
"value": "11352"
},
{
"field": "number_of_requests",
"value": "241398"
}
],
[
{
"field": "AccountId",
"value": "74923"
},
{
"field": "number_of_requests",
"value": "238566"
}
]
],
"statistics": {
"recordsMatched": 502870.0,
"recordsScanned": 165908292.0,
"bytesScanned": 744173091162.0
},
"status": "Complete"
}
{
"results": [
[
{
"field": "AccountId",
"value": "11352"
},
{
"field": "number_of_requests",
"value": "185096"
}
]
],
"statistics": {
"recordsMatched": 502870.0,
"recordsScanned": 165908292.0,
"bytesScanned": 744173091162.0
},
"status": "Complete"
}

我需要聚合结果,将值与请求数相匹配,然后按降序打印结果。

期望输出:

AccountID : Number of Requests
11352 : 426494
74923 : 238566

电流输出:

AccountID : Number of Requests
11352 : 241398
11352 : 185096
74923 : 238566

我当前运行的jq查询的文件名为ResultDir:

list=$(jq -S '.results[] | map( { (.field) : .value} ) | add ' $ResultsDir | 
jq -s -c 'sort_by(.number_of_requests|tonumber) | reverse[] ' |
jq -r '"(.AccountId) : (.number_of_requests)"')

如何在打印出相同帐户的结果之前将其合并?结果还需要按照请求数量的降序排列。

在可能的情况下,通常建议尽量减少对jq的调用次数。在这种情况下,只需调用一次jq就可以很容易地实现所需的输出。

假设输入是沿着Q中所示行的JSON对象的有效流,则以下内容将产生所需的输出:

jq -nr '
[inputs | .results[] | map( { (.field) : .value} ) | add] 
| group_by(.AccountId)
| map([.[0].AccountId, (map(.number_of_requests|tonumber) | add)])
| sort_by(.[1]) | reverse
| .[]
| join(" : ")
' 

最新更新