在Perl的AWK?我有一个AWK命令行。我不知道如何在Perl脚本中使用它

时间:2013-10-26 18:23:46

标签: perl awk

我的AWK命令是:

awk'BEGIN {count=0} {count=count+($3-$2)} END {print count}' zebrafish

如何在Perl脚本中使用它?

5 个答案:

答案 0 :(得分:5)

我认为没有必要在awk中使用perl。相同的功能可以完全在perl内实现,如下所示

open my $fopen, '<', zebrafish or die $!;
my $count = 0;
while (<$fopen>) {
    $count += $3-$2 if /(\S+)\s+(\S+)\s+(\S+)/;
}
print "count = $count\n";
close $fopen;

如果您仍想使用awk

您可以使用system函数从awk脚本

调用任何shell命令Perl
system("<awk_command>");

如果您希望awk的输出存储在perl内的变量中,请使用

my $awk_output = `<awk_command>`;

在旁注中,您的awk命令可以压缩为

awk'{count+=($3-$2)} END {print count}' zebrafish

答案 1 :(得分:3)

为什么一起使用Perl和AWK?即使已经编写了AWK代码,如果你使用Perl扩展它,将它转换为Perl也许是有意义的。例如:

sub count_diffs($filename) {
  open my $f, "<$filename";
  my $count = 0;
  while (<$f>) {
    my @F = split ' ';
    $count += $F[2]-$F[1];
  }
  return $count;
}

my $count = count_diffs('zebrafish');

您还可以使用命令行选项编写一个执行AWK代码功能的Perl单行程序:

perl -lane '$count += $F[2]-$F[1]; END {print $count}'

但是在这种形式下,嵌入更大的Perl程序并不比AWK代码容易得多。

答案 2 :(得分:0)

Perl中的命令应为:

system("awk 'BEGIN {count =0} {count =count+(\$3-\$2)} END {print count}' zebrafish");  

请记住要转义字符$",我不知道\还有什么。如果有疑问,试着逃避;这就是哲学。

答案 3 :(得分:0)

您可以使用:

system("command here"); #will return 0 on success  
#or
open my $out,"command here |"; while(my $line=<$out>){print $line;} 
#or   
my $out=`command`;
#or
exec("command here"); #probably you don't want it!

答案 4 :(得分:0)

当Perl第一次出现时,它被用作更强大的awk替代品。

由于这种需要,Perl实际上附带了实用程序a2p,它仅用于此目的 - 它代表awk to perl

我尝试将您的脚本保存到一个文件中,然后通过a2p运行它,它运行良好 - 生成了工作的Perl脚本。它不是很短(约20行),但它起作用了。