Задача:
sdout the load avg from top in a decimal form like(e.g 0.23)
Решение:
top -b -n 1 | perl -lane 'print "$1.$2" if /load average: (\d+)[,.](\d+)/'
Примечания:
Получает среднюю нагрузку на 1 м. Похоже, это то, что вы хотите, но вы должны четко это заявить. При необходимости код можно легко изменить для получения средних значений нагрузки за 5 или 15 минут или даже за все три периода.
Как указал @terdon , uptime
может быть лучшей отправной точкой, чем top
в этом случае.
После первых двух строк вы туманно описываете, что хотите сделать с результатом. Последующие шаги, которые вы хотите предпринять, должны стать предметом новых вопросов.
В Perl числа автоматически -преобразуются в строки и наоборот -наоборот. Любая числовая операция может быть выполнена над строкой, представляющей число. например.print "$1.$2"+11.11
Вопрос 2:
Эта часть касается второго вопроса, который совершенно не связан с первым.
Я призываю ОП опубликовать этот вопрос отдельно .
How Can I convert the string value to decimal/float/integer ?
Лучше записывать как :Выполнение числовых сравнений строк с помощью Chef InSpec .
Решение:
Преобразование строки в числовой формат с помощью to_i
или to_f
.
Пример:
describe command("echo 1.00") do
its("stdout.to_f") { should be < 1.03 }
end
Пояснение:
Логично, что стандартный вывод рассматривается как строка.Также весьма разумно числовое сравнение требует, чтобы два числа были... числами. К счастью, преобразование можно выполнить с помощью удобных строковых методов Ruby :to_i
, to_f
, to_r
и to_c
.