我想打印awk中倒数第二列或字段。字段的数量是NF变量。我知道我应该能够使用$NF,但我不确定如何使用它。
但这似乎并不奏效:
awk ' { print ( $NF-- ) } '
我想打印awk中倒数第二列或字段。字段的数量是NF变量。我知道我应该能够使用$NF,但我不确定如何使用它。
但这似乎并不奏效:
awk ' { print ( $NF-- ) } '
当前回答
对克里斯·坎农(Chris Kannon)公认答案的一个小补充:只有在最后一列有第二列时才打印。
(
echo | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 3 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
)
其他回答
日期 美国东部时间2022年7月9日星期六11:57:36 date | gawk '$_=$——NF' | mawk '$!——NF = $ NF '
EDT
对克里斯·坎农(Chris Kannon)公认答案的一个小补充:只有在最后一列有第二列时才打印。
(
echo | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 3 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
)
如果您有很多列,并且希望打印所有列,而不是最后一列的三列,那么这可能会有所帮助
awk '{ $NF=“”;$(NF-1)=“”;$(NF-2)=“” ; print $0 }'
你离结果不远了!这样做:
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
这是最简单的:
awk '{print $--NF}'
原来的$NF——没有工作的原因是表达式在递减之前求值,而我的前缀递减是在求值之前执行的。