awk - максимальне значення середнього ковзання


1

У мене є команда bash, яка дає мені найвище значення в 9-му стовпці файлу:

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

log.txt - журнал використання процесора для процесу 1923 & amp; вимірюється 10 разів на секунду.

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

Будь ласка, допоможіть мені сформулювати команду awk, яка:

  1. Обчислює середню величину прокатки на 1 секунду
  2. Вказує мені пікове значення, яке він знаходить

Дуже дякую, Фідель


Я збентежений, як один-лайнер (або чудовий awk-скрипт грошового класу) може створити "середню величину", якщо вони вручну виконуються проти журналу ... вам потрібно буде відстежувати журнал , а сценарій awk з пропозицією END не працюватиме для друку пікових значень.
tink

1
Привіт tink, сценарій awk виконується на файл, який не оновлюється постійно ... це відповідь на ваше запитання?
Fidel

Хех. Тоді вид зводиться до семантики. Я не думаю, що «прокатка» є гарним словом у даній ситуації. :)
tink

1
Чи вважаєте ви, що використовуєте ulimit запобігти перевищенню команди?
chepner

ха, я тебя зараз замислюю;)
Fidel

Відповіді:


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
}

Редагувати: Виправлена ​​можлива помилка і вилучено фільтрування рядків (що зробило речі складнішими, ніж потрібно) - тепер їй потрібно дати лише номери завантаження CPU. Але, принаймні, зараз він правильно обчислює середнє значення.


Нічого собі, глобус, я вражений! Велике спасибі!
Fidel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.