我想要的只是打印最后两列。
您可以使用变量
NF
,将其设置为输入记录中的字段总数:
awk '{print $(NF-1),"\t",$NF}' file
这假设您至少有 2 个字段。
awk '{print $NF-1, $NF}' inputfile
注意:这仅在至少存在两列时才有效。在只有一列的记录上,您会得到一个虚假的
"-1 column1"
@jim mcnamara:尝试在
NF
周围使用括号,i。 e. $(NF-1)
和 $(NF)
代替 $NF-1
和 $NF
(适用于 FreeBSD 的 Mac OS X 10.6.8 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
使用 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: 因此,gawk 是 $NF-1 与 $(NF-1) 问题的核心。下一个问题 POSIX 说什么? 每:
http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html
没有一种方向或另一种方向。不好。 gawk 表示减法,其他 awks 表示字段编号或减法。嗯。
试试这个
$ 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% /
请尝试此操作以考虑所有可能的情况:
awk '{print $(NF-1)"\t"$NF}' file
或
awk 'BEGIN{OFS="\t"}' file
或
awk '{print $(NF-1), $NF} {print $(NF-1), $NF}' file
使用
NF>=2
和 NF==1
通过:
$ echo {a..z} | xargs -n5
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
z
$ echo {a..z} | xargs -n5 |
awk 'NF == 1 { print $NF };
NF >= 2 { print $(NF-1),$NF }
'
d e
i j
n o
s t
x y
z