AWK - 打印输入文件每行的倒数第二个字段

Posted

技术标签:

【中文标题】AWK - 打印输入文件每行的倒数第二个字段【英文标题】:AWK -Print the next to last field of each line of input file 【发布时间】:2013-03-17 01:54:33 【问题描述】:

我有一个输入文件文件,其内容不断更新 有不同数量的字段,我想要打印到一个新文件 每行输入文件的倒数第二个字段: awk 'print $(NF-1)' 输出文件

错误: 和 awk: (FILENAME=- FNR=2) 致命:尝试访问字段 -1

需要帮助。在此先感谢

【问题讨论】:

【参考方案1】:

另一个 awk 行:(打高尔夫球):

awk 'NF>1&&$0=$(NF-1)' 

【讨论】:

有效吗? echo foo | awk 'NF && $0 = $(NF-1)' 输出 foo.【参考方案2】:

在没有字段的行(空白行或所有空格)NF 为 0,因此计算结果为 $(-1)。此外,如果只有一个字段,您的代码将打印 $0,这可能不是您想要的。

awk 'NF>=2 print $(NF-1)'

【讨论】:

【参考方案3】:

应该是awk 'NF > 1 print $(NF - 1); '

awk 'NF print $(NF - 1) ' 不正确。当NF == 1 时,它会打印$0,它不是在最后一个字段旁边

【讨论】:

+1 表示解决方案但丢失了空语句(尾随分号) @EdMorton:你说的“但是丢失了空语句(尾随分号)”是什么意思 语句print $(NF - 1) 后面的分号引入了一个空/null 的后续语句。只需去掉分号即可解决问题,即使用 print $(NF - 1) 而不是 print $(NF - 1); 这是我的风格。我想让它看起来更像是一个声明。 :) 为了澄清为什么当我看到虚假的分号时它让我浪费时间和沮丧 - 这两个语句的作用之间存在巨大差异:x > y print x > y; print; x = a bx = a; b; 也是如此。因此,当您在不做任何事情的情况下输入分号时,我最初的想法是弄清楚他们在做什么,因为分号的位置通常会对您的程序产生重大影响,然后当我说服我自己它什么也没做,它是一种“风格选择”,而不是随之而来的烦恼......

以上是关于AWK - 打印输入文件每行的倒数第二个字段的主要内容,如果未能解决你的问题,请参考以下文章

awk命令范例

linux之awk命令

awk

awk二十问

awk脚本读取每行中具有不同字段数的输入文件

AWK - 比较后打印完整的输入字符串