JQ сумма и умножить значения, чтобы получить совокупный - PullRequest
0 голосов
/ 11 марта 2020

Учитывая следующее 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 всего.

Только для записи, я использую командную строку jq в CentOS8:

jq --version
jq-1.5

1 Ответ

1 голос
/ 11 марта 2020

Однострочное решение:

reduce .apps[] as $x (0; . + ($x | .memory * .instances))

Или более элегантно:

def sigma(s): reduce s as $x (0; . + $x);

sigma(.apps[] | .memory * .instances)
...