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


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

4 96
awk

4 ответа:

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

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

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

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

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

@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

использование 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-это cuplrit в выпуске $NF-1 против $(NF-1). Следующий вопрос что говорит POSIX? Пер:

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

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