perl脚本中的awk命令获取错误

时间:2017-03-07 10:59:48

标签: bash perl

我在perl脚本中运行以下代码。

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

然而,它给了我错误:

${tomcat}/conf/server.xml

导致此错误的原因是什么?

2 个答案:

答案 0 :(得分:2)

尝试逃避$符号:

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

答案 1 :(得分:1)

在perl的反引号中调用awk是一件非常讨厌的事情。 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";