使用 awk 或 cut 命令获取 CPU 百分比

使用 awk 或 cut 命令获取 CPU 百分比

我正在尝试通过 PHP 脚本执行 Linux 命令来获取每个核心的 CPU 百分比:

… 和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 核 CPU,我想将输出直接用于 Google 图表,因此我只需要 8 核的 CPU 百分比,而不需要服务器名称。

能帮我解决这个问题吗?

答案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>";
?>

相关内容