Використовуючи команду 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, тому мені потрібно лише відсоток CPU для 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>";
?>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.