2017-03-07 6 views
0

私のPerlスクリプトで以下のコードを実行しています。このエラーの原因となっている何perlスクリプトのawkコマンドでエラーが発生する

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

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

しかし、それは私にエラーを与えていますか?

+0

を:

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

をそして、 '$ '==" Amy "' data.txt);' –

答えて

2

は$記号エスケープしてみます。perlからバッククォートでawkを呼び出す

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

笑、これはちょうどこれを持っていた、 'my($ record)=マップスカラー(qx($ _))、q(awk -F '[:;]' '昨日 'tcl'スクリプトから' awk'を呼び出すときに問題が発生しました... – user2141046

1

を行うにはかなり厄介なものです。 はほとんどすべて同じ機能を複製しています。オーバーヘッド、非効率性、引用の問題が発生します(例のように)。

なぜ代わりません:

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

これは何をやっている複製ができますが、その代わりのように完全に、よりエレガントな何か行うことができます:

print join " ", @{$person{'Amy'}},"\n"; 
関連する問題