如何使用 jq 从 JSON 输出计算平均值

nov*_*min 6 json average jq

这是我尝试用 jq 解析以获得平均值的确切 JSON

{
    "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
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

使用.Datapoints[]|select(.ExtendedStatistics.p80 >=0 )| [.ExtendedStatistics.p80] | @tsv 给我

"7.39284928374"
"2.234234"
"2.4567"
"2"
"2" 
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取所有数字的平均值 如何获取单个数字作为输出 预期输出

3.216756656748
Run Code Online (Sandbox Code Playgroud)

计算为

Average:    16.08378328374 / 5 = 3.216756656748
Run Code Online (Sandbox Code Playgroud)

Pos*_*shi 12

您可以创建一个数组,而不是每个条目一个数组,然后将其通过管道传递给过滤器添加和过滤器长度,这将添加数组中的数字并计算数组的长度。最后,您将两个过滤器的结果相除……瞧!

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

  • 与 `[ .Datapoints[].ExtendedStatistics.p80 | 选择(. >= 0) ] | 添加/length`可以保存一些字符 (6认同)