我收到awk的语法错误。
value = a|b|c|d|e|F|g|h
my $record = `$value | awk -F "|" '{print $5}'`;
谢谢,
答案 0 :(得分:3)
试试这个:
my $record = ( split /\|/, 'a|b|c|d|e|F|g|h' )[4];
使用$value
:
my $record = ( split /\|/, $value )[4];
或者甚至是这样:
my ( undef, undef, undef, undef, $record ) = split /\|/, $value;
攻击到拆分,就像没有尝试过Perl一样。
答案 1 :(得分:3)
如果你曾经试图从Perl调用awk,那么你几乎肯定会做错事。 Perl几乎可以完成awk可以做的所有事情 - 并且更高效,更便携地完成。
my $value = 'a|b|c|d|e|F|g|h';
my $record = (split /\|/, $value)[4]; # 4, not 5 as Perl arrays are zero-indexed
答案 2 :(得分:1)
如果您处于shell提示符下,则使用以下命令:
echo 'a|b|c|d|e|F|g|h' | awk -F "|" '{print $5}'
但是你正在执行以下操作(假设Perl的$5
未初始化):
a|b|c|d|e|F|g|h | awk -F "|" '{print }'
(当你注意到它没有工作时,你没有尝试打印出你正在执行的命令吗?)
修正:
use String::ShellQuote qw( shell_quote );
my $cmd = shell_quote('echo', $value)
. ' | '
. shell_quote('awk', '-F', '|', '{print $5}');
my $fifth_field = `$cmd`;
当然,使用split
和列表切片要简单得多。
my $fifth_field = ( split /\|/, $value )[4];