我想要的只是打印的最后两列。
答案 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 awk
和gawk
)。
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