Только выходное значение, если x> y в awk

ВХОД:

0:root@server:/root # vmstat 60 2 System configuration: lcpu=52 mem=131072MB ent=10.00 kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------------------- rb avm fre re pi po fr sr cy in sy cs us sy id wa pc ec 5 0 13254063 12378057 0 0 0 0 0 0 3411 22516 9063 10 2 88 0 1.94 19.4 5 0 13341251 12290955 0 0 0 0 0 0 3507 20192 9062 9 2 89 0 1.88 18.8 0:root@server:/root # 

НЕОБХОДИМЫЙ ВЫХОД:

 0 

Оно равно нулю, так как среднее r <lcpu. Значения «id» в этом случае не важны.

другой INPUT:

 0:root@server:/root # vmstat 60 2 System configuration: lcpu=52 mem=131072MB ent=10.00 kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------------------- rb avm fre re pi po fr sr cy in sy cs us sy id wa pc ec 52 0 13254063 12378057 0 0 0 0 0 0 3411 22516 9063 10 2 6 0 1.94 19.4 53 0 13341251 12290955 0 0 0 0 0 0 3507 20192 9062 9 2 4 0 1.88 18.8 0:root@server:/root # 

НЕОБХОДИМЫЙ ВЫХОД:

 95 

Это 95, потому что среднее r> lcpu. И это 95, потому что id означает простоя, но нам нужно потребление процессора. Таким образом, 6 + 4 – это значение простоя, среднее из них равно 5. Таким образом, 100-5 = 95% – это загрузка процессора.

Среднее значение необходимо и в «r»! Не только в «id». В последнем примере это 52,5, поэтому было больше 52.

Это общая проблема UNIX для измерения потребления ЦП. Если r> lcpu и использование cpu% очень велико, то у нас есть узкое место процессора.

Интересно, что нет решения для обработки вывода vmstat, поэтому я прошу об этом гроссмейстерам awk.

Вопрос : Мне нужно что-то вроде этого: «vmstat 60 2 | GODLY-AWK-MAGIC-HERE»

Для получения дополнительной информации см. (Я не мог найти лучшую ссылку):

http://aix4admins.blogspot.com/2011/09/vmstat-t-5-3-shows-3-statistics-in-5.html

Если выполняемые потоки (r), деленные на количество CPU, больше одного -> возможное узкое место процессора

One Solution collect form web for “Только выходное значение, если x> y в awk”

Очень сырой:

 awk ' BEGIN { d = -1 } /lcpu/ { lcpu = substr($3, 6); next } $1 == "r" { ++d; next } d < 0 { next } { ++d r += $1 id += $16 next } END { if (r / d > lcpu) print 100 - id / d else print 0 } ' 

или если вам нравится:

 awk ' /lcpu/ { lcpu=substr($3, 6) } $1 ~ /[0-9]+/ { ++d r += $1 id += $16 next } END { print (r/d>lcpu) ? 100 - id / d : 0 } ' 

чтобы:

 awk '/lcpu/{lcpu=substr($3,6)}$1~/[0-9]+/{++d;r+=$1;id+=$16;next;}END{print(r/d>lcpu)?100-id/d:0}' 

Получает ли он результаты, которые вы хотите?

  • Объединение файлов по 4 столбца каждый, в 4 файла для каждого столбца
  • Использование awk для суммирования значений столбца на основе значений другого столбца
  • Как выбрать строки в файле, который содержит число из списка номеров
  • git checkout конкретные файлы
  • Найдите шаблон и вставьте # в начале 2 строки до этого и 1 строку после этого
  • Поиск дубликатов экземпляров тега в файле
  • Получить последнюю минуту из строк из списка
  • Как я могу использовать awk для извлечения URL из HTML-файла?
  • Массив с двумя входными файлами awk
  • Как разбить текстовый файл на записи с помощью первого непустого символа с помощью awk и распечатать только записи, содержащие строку
  • Замена совпадающего текста после двух совпадающих строк
  • Linux и Unix - лучшая ОС в мире.