我想在awk中打印第二个最后一列或字段.字段数是可变的.我知道我应该可以使用,$NF但不知道如何使用它.
这似乎不起作用:
awk ' { print ( $NF-- ) } '
Run Code Online (Sandbox Code Playgroud)
Chr*_*non 265
awk '{print $(NF-1)}'
Run Code Online (Sandbox Code Playgroud)
应该管用
小智 21
克里斯·坎农(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) ) }'
)
Run Code Online (Sandbox Code Playgroud)
小智 13
这是最简单的:
awk '{print $--NF}'
Run Code Online (Sandbox Code Playgroud)
原始$NF--不起作用的原因是因为表达式在递减之前被评估,而我的前缀递减在评估之前执行.
首先递减该值,然后打印它 -
awk ' { print $(--NF)}' file
Run Code Online (Sandbox Code Playgroud)
或者
rev file|cut -d ' ' -f2|rev
Run Code Online (Sandbox Code Playgroud)
你离结果不远了!这样做:
awk '{NF--; print $NF}' file
Run Code Online (Sandbox Code Playgroud)
这会减少一个字段的数量,因此$NF包含前一个倒数第二个。
让我们生成一些数字并将它们打印在 5 组中:
$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12
Run Code Online (Sandbox Code Playgroud)
让我们在每一行打印倒数第二个:
$ seq 12 | xargs -n5 | awk '{NF--; print $NF}'
4
9
11
Run Code Online (Sandbox Code Playgroud)