2014-01-24 235 views
2

我有一個看起來像這樣的製表符分隔的文件(虛擬):運行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命令中看不到任何語法錯誤。

+1

上訪幾乎就像用grep從AWK內。 –

回答

5

除了事實,什麼是你想從perl內執行awk實現(因爲它可以使用後者本身來完成),你可以使用q操作:

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

注意,使用雙引號會插入變量,您需要轉義這些變量。

4

你可以從Perl本身a\tb S中的數量,而不調用外部命令:

#!/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";