我在我的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
是什么原因造成这个错误?
我在我的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
是什么原因造成这个错误?
设法逃脱这个$符号:
my $record = `awk -F'[:;]' '\$1 == "Amy"' data.txt`;
哈哈,昨天从'tcl'脚本调用'awk'时出现问题... – user2141046
调用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";
未测试,'我($记录)=地图标量(qx($ _)),q(awk -F'[:;]''$ 1 ==“Amy”'data.txt);' –