如何使用awk打印最后两列

时间:2010-11-29 14:59:23

标签: awk

我想要的只是打印的最后两列。

6 个答案:

答案 0 :(得分:173)

您可以使用变量NF,该变量设置为输入记录中的字段总数:

awk '{print $(NF-1),"\t",$NF}' file

这假设您至少有2个字段。

答案 1 :(得分:10)

awk '{print $NF-1, $NF}'  inputfile

注意:仅当至少存在两列时,此方法才有效。在包含一列的记录中,您将获得虚假的"-1 column1"

答案 2 :(得分:6)

@jim mcnamara:尝试在约NF周围使用括号,i。即$(NF-1)$(NF)代替$NF-1$NF(适用于Mac OS X 10.6.8 for FreeBSD awkgawk)。

echo '
1 2
2 3
one
one two three
' | gawk '{if (NF >= 2) print $(NF-1), $(NF);}'

# output:
# 1 2
# 2 3
# two three

答案 3 :(得分:1)

使用gawk表现出问题:

 gawk '{ print $NF-1, $NF}' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three

我只是把它放在Solaris 10 M4000上: 所以,gawk是$ NF-1与$(NF-1)问题的杯子。下一个问题POSIX说什么? per:

http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html

没有方向这样或那样。不好。 gawk意味着减法,其他awks意味着字段数或减法。 HMM。

答案 4 :(得分:0)

尝试

$ cat /tmp/topfs.txt
/dev/sda2      xfs        32G   10G   22G  32% /

awk print last column
$ cat /tmp/topfs.txt | awk '{print $NF}'

awk print before last column
$ cat /tmp/topfs.txt | awk '{print $(NF-1)}'
32%

awk - print last two columns
$ cat /tmp/topfs.txt | awk '{print $(NF-1), $NF}'
32% /

答案 5 :(得分:0)

请尝试此操作以考虑所有可能的情况:

awk '{print $(NF-1)"\t"$NF}'  file

awk 'BEGIN{OFS="\t"}' file

awk '{print $(NF-1), $NF} {print $(NF-1), $NF}' file