我的脚本是:
#!/usr/bin/perl -w
my $line="1 2 3 4 5 6 7";
print $line;
my $thirdlast=`print $line |awk '{print $(NF-3)}'`;
print $thirdlast;
输出为:
1 2 3 4 5 6 7 awk: 0602-542 There is an extra ) character.
The source line is 1.
The error context is
{print 201 1 >>> 201NF-3) <<<
Syntax Error The source line is 1.
awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
awk: 0602-542 There is an extra ) character.
它在抱怨什么?我的脚本有什么问题吗?不明白为什么它会说The source line is 1
。
我的脚本需要修复什么?
答案1
您不需要在程序awk
内部调用perl
,perl
提供执行此类操作所需的函数:
#!/usr/bin/perl -w
my $line="1 2 3 4 5 6 7";
my @tab = split(/\s+/, $line);
print $tab[-3],"\n";
这个小程序输出:5
答案2
Sylvain 指出,您实际上不需要awk
从内部调用perl
,因为后者可以执行前者可以执行的任何操作。但是,要回答您的原始问题,您需要 i) 转义内部$
,awk
ii) 正确将您的 Perl 变量传递给您启动的子 shell(print
在 shell 中是完全不同的东西)。类似于:
#!/usr/bin/perl -w
my $line="1 2 3 4 5 6 7";
## Use echo, not print and escape the $ in $(NF-3)
my $thirdlast=`echo "$line" |awk '{print \$(NF-3)}'`;
print $thirdlast;
答案3
可以这样做同样cut
的事情:
cut -d ' ' -F <field>