Все, что я хочу, это два последних опубликованных столбца.
Как печатать последние два столбца с помощью 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 подразумевают номер поля или вычитание. хмм.