无法使用 Perl 脚本从变量中的 awk 获取输出。

Unable to get output from awk in a variable using Perl Script.

我是 Perl 脚本的新手。我正在编写必须获得 CPU 利用率的代码。我正在尝试运行命令,然后在变量中获取输出。但是当我尝试打印变量时,屏幕上什么也没有。

命令在终端中运行良好并为我提供了输出。 (我正在使用 Eclipse)。

my $CPUusageOP;
$CPUusageOP = qx(top -b n 2 -d 0.01 | grep 'Cpu(s)' | tail -n 1 | gawk '{print ++}'); 
print "O/P of top command ", $CPUusageOP;

我得到的输出是:

    O/P of top command

预期输出:

    O/P of top command 31.4

谢谢。

qx() 将在您的 gawk 中插入 </code> 等,如果您使用了警告</p>,您就会知道 <pre><code>use strict; use warnings;

所以你需要逃避他们:

... gawk '{print $2+$4+$6}'); 

此外,当然,这在 Perl 中是一件愚蠢的事情。你可以做所有这些,除了 top (它可能在某些模块中仍然可用)。例如:

my @lines = grep { /\QCpu(s)/ } qx(top -b n 2 -d 0.01);
my $CPUusageOP = $lines[-1];
$CPUusageOP = ( split ' ', $CPUusageOP )[1,3,5];

我不记得 awk 是否以 </code> 或 <code>[=19=] 开始字段名称,但可以根据需要调整它。

除了top,您不需要使用任何外部工具。 Perl 可以完成剩下的工作:

#!/usr/bin/perl
use warnings;
use strict;

my $line;
open my $TOP, '-|', qw( top -b n 2 -d 0.01 ) or die $!;
while (<$TOP>) {
  $line = $_ if /Cpu\(s\)/;
}
my ($us, $ni, $wa) = (split ' ', $line)[1, 3, 5];
{   no warnings 'numeric';
    print $us + $ni + $wa, "\n";
}