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?
awk -v x = 2 '{print $ x}'
ou dans un script Shell:
#!/bin/sh num = $ 1 awk </ tmp/in -vx = $ num '{print $ x}'> /tmp/out
awk '{print $'$myvar'}' < /tmp/in > /tmp/out
Où $ myvar est votre colonne variable (un entier). Attention aux injections de script!