Perl - awk语法错误@array

时间:2014-05-13 16:21:32

标签: perl syntax awk

我需要一些帮助才能让awk在perl中工作,或找到更好的替代方案......

此代码在|处返回有关语法的错误使用awk命令解析细节时。

my @LIST = `/bin/sh $DIR/ami-show.sh Version: | awk '{print $3}'`;

确切的错误是

Use of uninitialized value $3 in concatenation (.) or string at test line 20, <STDIN> line 1.

非常感谢任何帮助

编辑:已解决!!

将'{print \ $ 3}'添加到所有按预期执行此命令的工作。

2 个答案:

答案 0 :(得分:2)

您希望阻止Perl插入$3变量。您可以尝试将awk命令分隔为自己的字符串,以便更好地进行插值控制:

my $awk = q(awk '{print $3}');
my @LIST = `/bin/sh $DIR/ami-show.sh Version: | $awk`;

答案 1 :(得分:2)

正如您已经建立的那样,问题在于变量$3的插值。而不是转义$以解决问题,可以通过使用perl来分割命令的输出来完全避免这种情况。

您应该可以使用split而不是依赖awk在perl中执行此类操作。请注意,$3命令中使用的awk对应于索引号2,因为数组从索引0开始。

my $output = `/bin/sh $DIR/ami-show.sh Version:`;
my $column = (split ' ', $output)[2];

split将正则表达式作为其第一个参数(模式)并拆分第二个参数中包含的字符串。上面的代码将命令的输出拆分为任意数量的空白区域,这与awk默认执行的操作相同。

编辑:如果您看到我的第一次编辑,我只是​​做了split $output,省略了模式参数。这实际上是有效的,因为不指定模式会调用类似awk的行为。