无法使用 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";
}
我是 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";
}