簡體   English   中英

Perl腳本中的awk命令出現錯誤

[英]awk command in perl scripts getting error

我在我的perl腳本中運行以下代碼。

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`;

從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";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM