我有一个输入文件,其内容不断更新,包含各种数量的字段。我想要做的是将每行输入文件的倒数第二个字段打印到一个新文件中:
awk '{print $(NF-1)}' outputfile > newfile
错误信息: awk: (FILENAME=- FNR=2) fatal: attempt to access field -1
需要帮助。提前致谢。
对于没有字段的行(空行或全部是空格的行),NF
为0,因此计算结果为 $(-1)
。如果只有一个字段,则您的代码将打印 $0
,这可能不是您想要的。
awk 'NF>=2 {print $(NF-1)}'
应该是awk 'NF > 1 { print $(NF - 1); }'
awk 'NF { print $(NF - 1) }'
是不正确的。当NF==1
时,它会打印$0
,而不是倒数第二个字段。
awk 'NF>1&&$0=$(NF-1)'
echo foo | awk 'NF && $0 = $(NF-1)'
输出 foo
。 - pynexj
print $(NF - 1)
后面的分号引入了一个空/无效的后续语句。只需去掉分号即可解决问题,即使用{ print $(NF - 1) }
而不是{ print $(NF - 1); }
。 - Ed Mortonx > y { print }
和x > y; { print; }
。对于{x = a b}
和{x = a; b;}
同样适用。因此,当你故意添加没有任何作用的分号时,我最初的想法是找出它们的作用,因为分号的位置通常对程序有很大的影响,然后当我确信它们没有起到任何作用,而只是一种“风格选择”时,就会感到恼怒...... - Ed Morton