2017-03-07 128 views
0

我在我的perl脚本中运行下面的代码。在perl脚本中awk命令出错

my $record = `awk -F'[:;]' '$1 == "Amy"' data.txt`; 

然而,它给我的错误:

awk: syntax error at source line 1 
context is 
    >>> == <<< 
awk: bailing out at source line 1 

是什么原因造成这个错误?

+0

未测试,'我($记录)=地图标量(qx($ _)),q(awk -F'[:;]''$ 1 ==“Amy”'data.txt);' –

回答

2

设法逃脱这个$符号:

my $record = `awk -F'[:;]' '\$1 == "Amy"' data.txt`; 
+0

哈哈,昨天从'tcl'脚本调用'awk'时出现问题... – user2141046

1

调用awk在反引号从Perl是一个非常讨厌的事情。 perl复制几乎所有相同的功能 - 你所做的只是引入额外的开销,低效率和报价问题(就像你在你的例子中)。

为什么不来代替:

open (my $input, '<', 'data.txt') or die $!; 
my ($record) = grep { (split /[:;]/)[0] eq 'Amy' } <$input>; 

此复制你在做什么,但你可以做,而不是完全的东西更优雅,如:

my %person; 
while (<$input>) { 
    chomp; 
    my ($name, @fields) = split /[;:]/; 
    $person{$name} = \@fields; 
} 

然后:

print join " ", @{$person{'Amy'}},"\n";