Использование команды awk или cut для получения процента загрузки процессора

0

Я пытаюсь выполнить команду Linux через PHP-скрипт, чтобы получить процент загрузки процессора для каждого ядра:

... с cut:

 $output = null;
 passthru("mpstat -P ALL | grep 0 | tr -s ' ' | cut -d ' ' -f 4", $output);
 echo "$output <br>";

... с awk:

$output = null;
passthru("mpstat -P ALL | grep 0 | tr -s ' ' | awk '{print $4}'", $output);
echo "$output <br>";

с двумя утверждениями вывод:

имя моего сервера 2,19 2,21 2,30 2,26 2,22 2,20 2,14 2,09 2,07 0

Мой сервер имеет 8-ядерный процессор, и я хочу использовать вывод непосредственно в диаграммах Google, поэтому мне нужен только процент ЦП для 8 ядер, без имени сервера.

Можете помочь мне с этим вопросом?

Мохаммед А.Л. Джакри
источник
Так в чем твоя проблема? Использование echo(implode("\n", $output)[1]);делает то, что вам нужно?
Салем
спасибо, но мне все равно дают (имя сервера) перед цифрами
Мохаммед А.Л. Джакри
Если имя сервера всегда имеет одинаковую длину, вы можете использовать `cut ', чтобы удалить первую часть.
Хеннес
спасибо, но имя сервера не всегда одинаково, я хочу получить только цифры awkили cutкоманду?
Мохаммед А.Л. Джакри
1
@MohammedALJakry Можете ли вы использовать какой-нибудь сервис вставки для вывода mpstat -P ALL? Выполняя те же команды, что и вы, я не получаю имя хоста на выходе. Я получил следующее (4 ядра): `23.05.2013% usr 6,71 8,05 7,45 5,87 5,48`.
Салем

Ответы:

1

Я повторяю строку, потому что моя система mpstatотличается от того, что вы показываете в своем вопросе, но она должна работать, если ваш вывод - это то, что вы опубликовали.

<?
$string="the name of my server 2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0";
$output=system("echo $string | perl -ne '/^.+?\s+([\d\. ]+)/; print \"$1\"'");
echo "$output <br>";
?>

Скрипт Perl просто ищет самую длинную последовательность цифр, десятичных точек и пробелов ( [\d\. ]+) и печатает ее, которая должна отделять имена серверов от данных с произвольными именами серверов. Это не удастся, если имя вашего сервера заканчивается цифрой, что-то вроде foo bar 12. Он будет восприниматься не 12как часть имени сервера, а как часть данных.

Если имена ваших серверов никогда не содержат пробелов (что, я полагаю, не содержит пробелов), вы можете использовать эту gawkверсию, если вы предпочитаете:

<?
$string="thenameofmyserver 2.19 2.21 2.30 2.26 2.22 2.20 2.14 2.09 2.07 0";
$output=system("echo $string | gawk '{for(i=2; i<=NF; i++){printf \"%s \",$(i)}}'");
echo "$output <br>";
?>
terdon
источник