Как рассчитать среднее значение, используя jq из JSON output - PullRequest
0 голосов
/ 29 февраля 2020

Это точное значение JSON, для которого я пытаюсь проанализировать jq, чтобы получить среднее значение

{
    "Label": "CPUUtilization",
    "Datapoints": [
        {
            "Timestamp": "2020-02-20T18:35:00Z",
            "Unit": "Percent",
            "ExtendedStatistics": {
                "p80": 7.39284928374
            }
        },
        {
            "Timestamp": "2020-02-20T18:00:00Z",
            "Unit": "Percent",
            "ExtendedStatistics": {
                "p80": 2.234234
            }
        },
        {
            "Timestamp": "2020-02-20T18:45:00Z",
            "Unit": "Percent",
            "ExtendedStatistics": {
                "p80": 2.4567
            }
        },
        {
            "Timestamp": "2020-02-20T18:50:00Z",
            "Unit": "Percent",
            "ExtendedStatistics": {
                "p80": 2.0
            }
        },

        {
            "Timestamp": "2020-02-20T18:20:00Z",
            "Unit": "Percent",
            "ExtendedStatistics": {
                "p80": 2.0
            }
        }
    ]
}

Использование .Datapoints[]|select(.ExtendedStatistics.p80 >=0 )| [.ExtendedStatistics.p80] | @tsv дает мне

"7.39284928374"
"2.234234"
"2.4567"
"2"
"2" 

Я пытаюсь получить среднее значение по всем числам Как получить одно число в качестве вывода Ожидаемый результат

3.216756656748

Рассчитано как

Average:    16.08378328374 / 5 = 3.216756656748

1 Ответ

2 голосов
/ 29 февраля 2020

Вы можете создать один массив вместо массива для каждой записи, а затем передать его в фильтр add и в длину фильтра, который будет добавлять числа в массив и вычислять длину массива. Наконец, вы разделяете результаты обоих фильтров и ... вуаля!

jq '[.Datapoints[] | select(.ExtendedStatistics.p80>=0) | .ExtendedStatistics.p80] | add/length' file.json
...