1

У меня есть команда bash, которая дает мне самое высокое значение в 9-м столбце файла:

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

log.txt - это журнал загрузки ЦП для процесса 1923, измеряемый 10 раз в секунду.

Мне нужно убедиться, что процесс 1923 года никогда не превышает определенный порог в течение более одной секунды.

Может кто-нибудь, пожалуйста, помогите мне сформулировать команду awk, которая:

  1. Вычисляет скользящее среднее значение за 1 секунду
  2. Говорит мне пиковое значение, которое он находит

Большое спасибо, Фидель

1 ответ1

3
#!/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
}

Редактировать: Исправлена возможная ошибка и убрана фильтрация строк (что делало вещи более сложными, чем необходимо) - теперь нужно указывать только цифры загрузки процессора. Но, по крайней мере, теперь он правильно вычисляет среднее значение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .