web-dev-qa-db-fra.com

Comment imprimer la Nième colonne d'un fichier texte avec AWK en utilisant argv

Supposons que j'ai un fichier texte avec des données séparées par des espaces en colonnes. Je veux écrire un script Shell qui prend en entrée un nom de fichier et un nombre N et n'imprime que cette colonne. Avec awk, je peux faire ce qui suit:

awk < /tmp/in '{print $2}' > /tmp/out

Ce code imprime la deuxième colonne.

Mais comment pourrait-on envelopper cela dans un script Shell afin qu'une colonne arbitraire puisse être passée dans argv?

25
speciousfool
awk -v x = 2 '{print $ x}'

ou dans un script Shell:

 #!/bin/sh 
 num = $ 1 
 awk </ tmp/in -vx = $ num '{print $ x}'> /tmp/out
37
Ray
awk '{print $'$myvar'}' < /tmp/in > /tmp/out

Où $ myvar est votre colonne variable (un entier). Attention aux injections de script!

7
strager