web-dev-qa-db-fra.com

Comment imprimer les deux dernières colonnes avec awk

Tout ce que je veux, ce sont les deux dernières colonnes imprimées.

97
vehomzzz

Vous pouvez utiliser la variable NF qui est définie sur le nombre total de champs de l'enregistrement d'entrée:

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

cela suppose que vous ayez au moins 2 champs.

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

Remarque: cela ne fonctionne que si au moins deux colonnes existent. Sur les enregistrements avec une colonne, vous obtiendrez un faux "-1 column1"

11
jim mcnamara

@ jim mcnamara: essayez d'utiliser des parenthèses pour environ NF, i. e. $(NF-1) et $(NF) au lieu de $NF-1 et $NF (fonctionne sous Mac OS X 10.6.8 pour FreeBSD awket 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

utiliser gawk présente le problème:

 gawk '{ print $NF-1, $NF}' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three

Je viens de mettre gawk sous Solaris 10 M4000: Donc, gawk est le mot clé de la question $ NF-1 vs. $ (NF-1). Question suivante, que dit POSIX? par:

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

Il n'y a pas de direction dans un sens ou dans l'autre. Pas bon. gawk implique une soustraction, d'autres awks impliquent un numéro de champ ou une soustraction. hmm.

1
jim mcnamara