2008-11-26 11 views
18

Supongamos que tengo un archivo de texto con datos separados por espacios en blanco en columnas. Quiero escribir un script de shell que tome como entrada un nombre de archivo y un número N e imprima solo esa columna. Con awk puedo hacer lo siguiente:Cómo imprimir la quincuagésima columna de un archivo de texto con AWK usando argv

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

Este código muestra la segunda columna.

Pero, ¿cómo se podría incluir eso en un script de shell para que se pueda pasar una columna arbitraria en argv?

+3

Resulta que este problema se resuelve bien por corte. Consulte "hombre cortado" para más detalles. – speciousfool

Respuesta

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

o en una secuencia de comandos shell:

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

Gracias por la edición Jonathan ... – Ray

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

donde $ mivar es su columna variable (un número entero). ¡Cuidado con las inyecciones de guiones!

+0

O bien: awk "{print \ $$ myvar}" ... la ventaja es que hay menos comillas. –

Cuestiones relacionadas