你的 awk 后面其实应该跟单引号而不是双引号,这样 $3 等位置变量就不需要加那么多单引号了。
另外,由于你要排序,所以你 print 出的那一行 title 也是没用的,这样 if 关键字其实是可省略的。
最后,你拿到 $ps 之后也许还需要再 split 之类的,所以还不如从一开始就由 Perl 来处理。
这样我最后那个 map join 也省了。

在 2011年3月24日 上午9:57,flw <[email protected]>写道:

> 多重引号真不是什么好现象,尤其是对于不会用引号的人来说:
>
> my $cmd = q[ps aux |awk "BEGIN { print '%CPU %MEM %STAT PID COMMAND' } { if
> ('$3' > 25 || '$4' > 25 || '$8'~/Z/ && '$8'!~/Z</) print '$3', '$4', '$8',
> '$2', '$11'}" |sort];
> my $ps = `$cmd`;
>
> 另外,在 Perl 中嵌入 Shell 也不是什么好现象,尤其对 Shell 学的不好的人来说:
>
> my @ps =
>     sort
>     map {
>         "@$_[qw(3 4 8 2 11)]
>     }
>     grep {
>         $_->[3] > 0 || $_->[4] > 0 || $_->[8] =~ /Z/ && $_->[8] !~ /Z</
>     }
>     map {
>         [ $_, split ]
>     }
>     `ps aux`;
>

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

回复