Tout ce que je veux, ce sont les deux dernières colonnes imprimées.
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.
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"
@ 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 awk
et 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
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.