AWK-打印每行输入文件的下一个最后一个字段

AWK-打印每行输入文件的下一个最后一个字段,awk,field,Awk,Field,我有一个输入文件,其内容不断更新 对于不同数量的字段,我试图打印到一个新文件 每行输入文件的倒数第二个字段: awk“{print$(NF-1)}”输出文件 错误: 和 awk:(FILENAME=-FNR=2)致命:尝试访问字段-1 我需要帮助。提前感谢对于没有字段的行(空行或全部空白)NF为0,因此计算结果为$(-1)。此外,如果只有一个字段,您的代码将打印$0,这可能不是您想要的 awk 'NF>=2 {print $(NF-1)}' 应该是awk'NF>1{print$(NF-1

我有一个输入文件,其内容不断更新 对于不同数量的字段,我试图打印到一个新文件 每行输入文件的倒数第二个字段: awk“{print$(NF-1)}”输出文件

错误: 和 awk:(FILENAME=-FNR=2)致命:尝试访问字段-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行:(打一点高尔夫球):


+1对于解决方案,但丢失空语句(尾随分号)@EdMorton:您所说的“但丢失空语句(尾随分号)”是什么意思?语句
print$(NF-1)
后的分号引入了一个空/空的后续语句。只要去掉分号就可以解决问题,即使用
{print$(NF-1)}
而不是
{print$(NF-1);}
。这是我的风格。我想让它看起来更像一个声明。:)为了澄清为什么当我看到虚假的分号时会让我浪费时间和沮丧——这两个语句的作用有很大的不同:
x>y{print}
x>y;{print;}
。类似地,对于
{x=ab}
{x=a;b;}
。因此,当你想让分号什么都不做而加入分号时,我最初的想法是想弄清楚它们在做什么,因为分号的放置通常对你的程序有很大的影响,然后当我说服自己分号什么都不做,这是一种“风格选择”时,烦恼随之而来……它起作用了吗<代码>echo foo | awk'NF&$0=$(NF-1)输出
foo
awk 'NF>1&&$0=$(NF-1)'