217 votes

Imprimer la deuxième colonne / champ dans `awk`

Je veux imprimer la deuxième colonne ou champ en awk. Le nombre de champs est la variable NF. Je sais que je devrais pouvoir utiliser $NF, mais je ne suis pas sûr de comment l'utiliser.

Et cela ne semble pas fonctionner :

awk ' { print ( $NF-- )  } '

12 votes

NF est l'index du dernier champ, $NF est la valeur du dernier champ

0 votes

Cela a du sens maintenant. c'est pourquoi le dollar en dehors des parenthèses fonctionne je suppose

6voto

VIPIN KUMAR Points 2061

Tout d'abord décrémente la valeur puis l'imprime -

awk ' { print $(--NF)}' file

OU

rev file|cut -d ' ' -f2|rev

4voto

Chris Koknat Points 1732

Solution Perl similaire à la solution awk de Chris Kannon:

perl -lane 'print $F[$#F-1]' file

Ces options de ligne de commande sont utilisées:

  • n boucle autour de chaque ligne du fichier d'entrée, n'imprime pas automatiquement chaque ligne

  • l supprime les sauts de ligne avant le traitement, et les ajoute à nouveau ensuite

  • a mode auto-split - divise les lignes d'entrée en tableau @F. Par défaut, la division se fait sur les espaces

  • e exécute le code perl

Le tableau de division automatique @F commence à l'indice [0] tandis que les champs awk commencent avec $1.
$#F est le nombre d'éléments dans @F

3 votes

Ou utilisez l'indexation négative déjà fournie par perl... $F[-2]

4voto

Fdv Points 335

Avez-vous essayé de commencer de la droite vers la gauche en utilisant la commande rev ? Dans ce cas, vous avez juste besoin d'imprimer la 2ème colonne :

seq 12 | xargs -n5 | rev | awk '{ print $2}' | rev
4
9
11

1voto

Sand1512 Points 248

Si vous avez de nombreuses colonnes et que vous voulez imprimer toutes sauf les trois dernières, alors cela pourrait vous aider

awk '{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }'

0 votes

Si vous voulez obtenir autre chose que les 3 derniers éléments, faites ceci : mawk '3 < NF && NF -= 3' Sam. le 9 juil. 12:30:20 HAE 2022 Sam. 9 juil.

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