jq 对值求和并相乘以获得聚合
jq sum and multiply values to get an aggregate
给定以下 JSON,有没有办法通过 jq
查询获取聚合内存(所有内存值的总和乘以实例数)?
{
"apps": [
{
"memory": 512,
"instances": 3
},
{
"memory": 256,
"instances": 1
},
{
"memory": 128,
"instances": 6
},
{
"memory": 1024,
"instances": 2
}
]
}
在这个例子中它应该执行以下操作:
512*3 + 256*1 + 128*6 + 1024*2
所以它应该总共给我 4608
。
仅作记录,我在 CentOS8 中使用命令行 jq
:
jq --version
jq-1.5
单行解决方案:
reduce .apps[] as $x (0; . + ($x | .memory * .instances))
或者更优雅:
def sigma(s): reduce s as $x (0; . + $x);
sigma(.apps[] | .memory * .instances)
给定以下 JSON,有没有办法通过 jq
查询获取聚合内存(所有内存值的总和乘以实例数)?
{
"apps": [
{
"memory": 512,
"instances": 3
},
{
"memory": 256,
"instances": 1
},
{
"memory": 128,
"instances": 6
},
{
"memory": 1024,
"instances": 2
}
]
}
在这个例子中它应该执行以下操作:
512*3 + 256*1 + 128*6 + 1024*2
所以它应该总共给我 4608
。
仅作记录,我在 CentOS8 中使用命令行 jq
:
jq --version
jq-1.5
单行解决方案:
reduce .apps[] as $x (0; . + ($x | .memory * .instances))
或者更优雅:
def sigma(s): reduce s as $x (0; . + $x);
sigma(.apps[] | .memory * .instances)