Tengo un archivo de texto así
foo bar baz
1 a alpha
2 b beta
3 c gamma
Puedo usar awk para imprimir ciertas columnas, como 1 y 3, con {print $1, $3}
, pero quiero especificar las columnas para imprimir especificando el encabezado de la columna, algo así {print $foo, $baz}
. Esto es útil para no tener que abrir el archivo y contar las columnas manualmente para ver qué columna es cuál, y no tengo que actualizar el script si cambia el número de columna o el orden. ¿Puedo hacer esto con awk (u otra herramienta de shell)?
fuente
print i
andprint $i
yprint
f [$ i] `declaraciones en el ciclo, etc. para rastrear qué sucede si eso ayuda.Usted pide
awk
, pero también se puede utilizar una herramienta más especializada para esto:csvtool
.o
fuente
Suponiendo que el archivo es un archivo TSV ("valores separados por tabulaciones"), use
csvkit
:La salida tendrá el formato CSV adecuado, pero podría cambiarse fácilmente a TSV:
La
-c
opcióncsvcut
también puede tomar números y rangos, y también puede usarse para reorganizar las columnas de los datos de entrada (una característica que a menudo echo de menos en lacut
utilidad estándar ).fuente