Как напечатать последние два столбца с помощью awk - PullRequest
97 голосов
/ 29 ноября 2010

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

Ответы [ 4 ]

175 голосов
/ 29 ноября 2010

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

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

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

10 голосов
/ 29 ноября 2010
awk '{print $NF-1, $NF}'  inputfile

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

6 голосов
/ 18 марта 2013

@ jim mcnamara: попробуйте использовать скобки примерно для NF, т.е. е. $(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
1 голос
/ 29 ноября 2010

при использовании 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 подразумевают номер поля или вычитание.хмм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...