在perl中运行awk命令

时间:2014-01-24 06:32:44

标签: perl awk

我有一个制表符分隔文件(虚拟),如下所示:

a  b
a  b 
a  c
a  c
a  b

我正在尝试在正在编写file.txt的perl脚本中编写awk命令。

awk命令:

$n=system(" awk -F"\t" '{if($1=="a" && $2=="b") print $1,$2}' file.txt|wc -l ")

Error :
comparison operator :error in '==' , ',' between $1 and $2 in print }'

awk脚本在命令行上正常运行,但在脚本内部运行时出错。

我在awk命令中看不到任何语法错误。

2 个答案:

答案 0 :(得分:5)

除了从awk内执行perl之后想要实现的目标(因为它可以使用后者本身完成),您可以使用q运算符:

$cmd = q(awk -F"\t" '{if($1=="a" && $2=="b") print $1,$2}' file.txt | wc -l);
$n = system($cmd);

请注意,使用双引号会插入变量,您需要转义它们。

答案 1 :(得分:4)

您可以在不调用外部命令的情况下从Perl获取a\tb的数量:

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

open my $FH, '<', 'file.txt' or die $!;
my $n = 0;
"a\tb\n" eq $_ and $n++ while <$FH>;
print "$n\n";
相关问题