120 votes

Comment imprimer les deux dernières colonnes en utilisant awk

Tout ce que je veux, ce sont les deux dernières colonnes imprimées. merci je suis surpris que cette question n'a pas encore été posée.

223voto

codaddict Points 154968

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.

17voto

jim mcnamara Points 8622
 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"

6voto

guzo Points 41

@ jim mcnamara: essayez d'utiliser des parenthèses pour environ NF , soit $(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
 

1voto

jim mcnamara Points 8622

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 sur 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X