Как печатать последние два столбца с помощью awk

Все, что я хочу, это два последних опубликованных столбца.

Ответ 1

Вы можете использовать переменную NF, которая установлена ​​на общее количество полей во входной записи:

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

это предполагает, что у вас есть как минимум 2 поля.

Ответ 2

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

Примечание: это работает только в том случае, если существует по крайней мере два столбца. На записях с одним столбцом вы получите ложный "-1 column1"

Ответ 3

@jim mcnamara: попробуйте использовать круглые скобки вокруг NF, i. е. $(NF-1) и $(NF) вместо $NF-1 и $NF (работает в Mac OS X 10.6.8 для 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

Ответ 4

Использование 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

Я просто поставил gawk на Solaris 10 M4000: Таким образом, gawk - куклит на $NF-1 против $(NF-1). Следующий вопрос, что говорит POSIX? за:

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

Нет направления, так или иначе. Нехорошо. gawk подразумевает вычитание, другие awks подразумевают номер поля или вычитание. хмм.