我有一个制表符分隔文件(虚拟),如下所示:
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命令中看不到任何语法错误。
答案 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";