我想打印awk中倒数第二列或字段。字段的数量是NF变量。我知道我应该能够使用$NF,但我不确定如何使用它。

但这似乎并不奏效:

awk ' { print ( $NF-- )  } '

当前回答

日期 美国东部时间2022年7月9日星期六11:57:36 date | gawk '$_=$——NF' | mawk '$!——NF = $ NF '

EDT

其他回答

类似于Chris Kannon的awk解决方案的Perl解决方案:

perl -lane 'print $F[$#F-1]' file

使用这些命令行选项:

N循环输入文件的每一行,不自动打印每一行 L在处理之前删除换行符,然后再将它们添加回去 自动分割模式-将输入行分割到@F数组中。默认为空格分割 执行perl代码

@F autosplit数组从索引[0]开始,而awk字段以$1开始。 $#F是@F中的元素数

日期 美国东部时间2022年7月9日星期六11:57:36 date | gawk '$_=$——NF' | mawk '$!——NF = $ NF '

EDT

你离结果不远了!这样做:

awk '{NF--; print $NF}' file

这将减少一个字段的数量,因此$NF包含前一个倒数第二个字段。

Test

让我们生成一些数字,并以5为一组打印:

$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12

让我们打印每行倒数第二行:

$ seq 12 | xargs -n5 | awk '{NF--; print $NF}'
4
9
11

您是否尝试使用rev命令从右向左启动? 在这种情况下,你只需要打印第二列:

seq 12 | xargs -n5 | rev | awk '{ print $2}' | rev
4
9
11

这是最简单的:

 awk '{print $--NF}' 

原来的$NF——没有工作的原因是表达式在递减之前求值,而我的前缀递减是在求值之前执行的。