我需要一些帮助才能让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}'添加到所有按预期执行此命令的工作。
答案 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的行为。