awk - 滚动平均值的最大值

awk - 滚动平均值的最大值

我有一个 bash 命令,它给出文件第 9 列的最高值:

cat "log.txt" | grep 1923 | awk '{print $9}' | sort -n | tail -1

log.txt 是进程 1923 的 CPU 使用率日志,每秒测量 10 次。

我需要验证进程 1923 不会超过某个阈值一秒以上。

有人可以帮我制定一个 awk 命令吗:

  1. 计算 1 秒滚动平均值
  2. 告诉我它找到的峰值

非常感谢,菲德尔

答案1

#!/usr/bin/awk -f
# NOTE: This example takes only CPU load as input. Use it like this:
#
#    cat log.txt | awk '$1 == "1923" {print $9}' | awk -f rolling-average.awk

BEGIN {
    freq = 10; sum = 0; max = 0
}

{
    i = NR % freq
    if (NR > freq)
        sum -= data[i]
    sum += (data[i] = $1)
}

NR >= freq {
    avg = sum/freq
    print "average for " NR-freq+1 ".." NR " = " avg
    if (avg > max) {
        max = avg
        pos = NR
    }
}

END {
    print "peak " max " at " pos-freq+1 ".." pos
}

编辑:修复了一个可能的错误并删除了线路过滤(这让事情变得比必要的更复杂)——现在只需要给出 CPU 负载数字。但至少它现在可以正确计算平均值了。

相关内容