【问题标题】:awk usage in perl scriptingperl 脚本中的 awk 用法
【发布时间】:2015-06-01 23:12:30
【问题描述】:

您好,我正在编写一个脚本,它需要使用 awk 命令对输出的第 6 列进行 grep,但正在获取其他输出。 perl 中使用 awk 提取第 6 列的确切语法是什么?

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my $filesystem=`df -h |grep -i dev|grep -vE '^Filesystem|proc|none|udev|tmpfs'`;
print "(\"$filesystem\"|awk '{print \$6}')"

Output :
7831c1c4be8c% ./test.pl
("/dev/disk1     112Gi   43Gi   69Gi    39% 11227595 18084674   38%   /
devfs          183Ki  183Ki    0Bi   100%      634        0  100%   /dev
"|awk '{print  $6}')%                                                                               

我正在尝试删除 % 怎么办?

7831c1c4be8c% cat test.pl
#!/usr/bin/perl
use warnings;
use strict;

open my $FS, q(df -h |) or die $!;
while (<$FS>) {
print +(split)[4], "\n"
    if /dev/i and not /devfs/;
 }
 7831c1c4be8c% ./test.pl
 40%

【问题讨论】:

  • 你在 perl 中使用 awk 的原因是什么?
  • 给我们一些输入数据和你喜欢的数据。我想只使用grepawk 就可以解决这个问题

标签: perl awk


【解决方案1】:

您不需要在 Perl 中使用 awk

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

open my $FS, '-|', q(df -h) or die $!;
while (<$FS>) {
    print +(split)[5], "\n"
        if /dev/i and not /^Filesystem|proc|none|udev|tmpfs/;
}

【讨论】:

  • 你也不需要grep (而且我敢肯定有一个替代使用df :)
  • @TomFenech:正在努力 :)
【解决方案2】:

正如前面的回答所说,perl 中不需要 awk 或 grep 系统调用。但是,我会告诉您,您的代码无法正常工作的一个原因是您从未进行过 awk 系统调用。 print 不执行系统调用。你必须使用system() 来执行它。

无论如何,你也可以像这样在单行中做你想做的事:

df -h | perl -lnae 'next if $F[0] =~ /regex/; print $F[5]'

【讨论】:

  • 为什么是echo "$(df -h)" | ... 而不仅仅是df -h | ...
  • @user000001 你是对的。 echo 完全没有必要。正如你所知道的,我单独使用 perl 比使用 bash 更多
猜你喜欢
  • 2015-11-08
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多