web-dev-qa-db-ja.com

awkを使用して最後の2列を印刷する方法

必要なのは、印刷された最後の2列のみです。

97
vehomzzz

入力レコードのフィールドの総数に設定される変数NFを使用できます。

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

これは、少なくとも2つのフィールドがあることを前提としています。

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

注:これは、少なくとも2つの列が存在する場合にのみ機能します。 1列のレコードでは、偽の"-1 column1"を取得します

11
jim mcnamara

@jim mcnamara:NFの周りに括弧を使用してみてください。 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
6
guzo

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はフィールド番号または減算を意味します。うーん。

1
jim mcnamara