sumar separador regulares expresiones examples comparar comando columnas campos archivos csv awk

csv - separador - comando sed



Imprimir columna separada por comas usando la lĂ­nea de comando Awk (4)

Tengo un problema aqui. Tengo que imprimir una columna en un archivo de texto usando awk. Sin embargo, las columnas no están separadas por espacios, solo con una coma. Se ve algo como esto:

column1,column2,column3,column4,column5,column6

¿Cómo imprimiría la tercera columna con awk?


Prueba este awk

awk -F, ''{$0=$3}1'' file column3

  • , Dividir campos por ,
  • $0=$3 Establezca la línea solo en el campo 3
  • 1 Imprime todo. ( explicado aquí )

Esto también podría usarse:

awk -F, ''{print $3}'' file


Si su único requisito es imprimir el tercer campo de cada línea, con cada campo delimitado por una coma, puede usar cortar:

cut -d, -f3 file

  • -d, establece el delimitador en una coma
  • -f3 especifica que solo se imprimirá el tercer campo

Tratar:

awk -F'','' ''{print $3}'' myfile.txt

Aquí en -F le está diciendo a awk que use "," como separador de campo.


Una solución simple, aunque awk -less en bash :

while IFS=, read -r a a a b; do echo "$a"; done <inputfile

Funciona más rápido para archivos pequeños (<100 líneas) y luego awk ya que usa menos recursos (evita llamar a la fork costosa y execve llamadas del sistema).

EDITAR de Ed Morton (perdón por escuchar la respuesta, no sé si hay una mejor manera de abordar esto):

Para poner fin al mito de que Shell se ejecutará más rápido que awk para archivos pequeños:

$ wc -l file 99 file $ time while IFS=, read -r a a a b; do echo "$a"; done <file >/dev/null real 0m0.016s user 0m0.000s sys 0m0.015s $ time awk -F, ''{print $3}'' file >/dev/null real 0m0.016s user 0m0.000s sys 0m0.015s

Espero que si obtiene un archivo REALY lo suficientemente pequeño, verá que el script de shell se ejecuta en una fracción de parpadeo más rápido que el script awk, pero ¿a quién le importa?

Y si no crees que es más difícil escribir scripts de shell robustos que los scripts awk, mira este error en el script de shell que publicaste:

$ cat file a,b,-e,d $ cut -d, -f3 file -e $ awk -F, ''{print $3}'' file -e $ while IFS=, read -r a a a b; do echo "$a"; done <file $