2008-11-26 7 views
18

Supposons que j'ai un fichier texte avec des données séparées par des espaces dans les 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:Comment imprimer la Nième colonne d'un fichier texte avec AWK en utilisant argv

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

Ce code imprime la deuxième colonne. Mais comment l'intégrer dans un script shell afin qu'une colonne arbitraire puisse être transmise dans argv?

+3

Il s'avère que ce problème est bien résolu par la coupe. Découvrez "homme coupé" pour plus de détails. – speciousfool

Répondre

27
awk -v x=2 '{print $x}'

ou dans un script shell:

 
#!/bin/sh 
num=$1 
awk < /tmp/in -v x=$num '{print $x}' > /tmp/out 
+0

Merci pour l'édition Jonathan ... – Ray

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

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

+0

Ou: awk "{print \ $$ myvar}" ... l'avantage étant de moins de citations. –

Questions connexes