Мой сценарий:
#!/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
.
Какая фиксация необходима моему сценарию?
Вы не должны звонить 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
Sylvain указал, Вы действительно не должны звонить awk
из perl
, так как последний может сделать что-либо, что первый может. Однако для ответа на исходный вопрос необходимо i) выйти $
внутренняя часть эти awk
, ii) правильно передать переменную Perl подоболочке, которую Вы запускаете (print
, что-то совершенно другое в оболочке). Что-то как:
#!/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;
То же самое может быть сделано с cut
как так:
cut -d ' ' -F <field>