我的AWK命令是:
awk'BEGIN {count=0} {count=count+($3-$2)} END {print count}' zebrafish
如何在Perl脚本中使用它?
答案 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
脚本
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行),但它起作用了。