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 b
和 x = a; b;
也是如此。因此,当您在不做任何事情的情况下输入分号时,我最初的想法是弄清楚他们在做什么,因为分号的位置通常会对您的程序产生重大影响,然后当我说服我自己它什么也没做,它是一种“风格选择”,而不是随之而来的烦恼......以上是关于AWK - 打印输入文件每行的倒数第二个字段的主要内容,如果未能解决你的问题,请参考以下文章