你的 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 访问此网上论坛。
