在awk中打印倒数第二列/字段
我想在awk中打印倒数第二列或者字段。 字段的数量是可变的。 我知道我应该可以使用$NF但不知道如何使用它。 
而这似乎并没有工作:
 awk ' { print ( $NF-- ) } ' 
	
 awk '{print $(NF-1)}' 
应该pipe用
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 ' { print ( $(NF-1) ) }' file 
这是最简单的:
  awk '{print $--NF}' 
 原来的$NF--的原因是因为expression式在递减之前被评估,而我的前缀递减在评估之前被执行。 
你离结果不远了! 这样做:
 awk '{NF--; print $NF}' file 
 这减less了一个字段的数量,所以$NF包含前面的倒数第二。 
testing
让我们生成一些数字,并按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 
Perl解决scheme类似于Chris Kannon的awk解决scheme:
 perl -lane 'print $F[$#F-1]' file 
这些命令行选项被使用:
- 
n循环input文件的每一行,不会自动打印每一行
- 
l在处理之前删除换行符,然后将其添加回来
- 
自动分割模式 – 将input行分割成 @F数组。 默认分割为空格
- 
e执行Perl代码
  @F autosplit数组开始于索引[0],而awk字段以$ 1开始。 
  $#F是@F中元素的数量 
您是否尝试过使用rev命令从右到左开始? 在这种情况下,您只需要打印第二列:
 seq 12 | xargs -n5 | rev | awk '{ print $2}' | rev 4 9 11 
如果你有很多列,想要打印所有的文件,但不是最后的三个文件,那么这可能会有所帮助
 awk '{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }' 
首先递减该值,然后打印它 –
 awk ' { print $(--NF)}' file 
要么
 rev file|cut -d ' ' -f2|rev