Cómo usar Awk para imprimir campos y columnas en un archivo


En esta parte de nuestra serie de comandos Linux Awk, veremos una de las características más importantes de Awk, que es la edición de campo.

Es bueno saber que Awk divide automáticamente las líneas de entrada que se le proporcionan en campos, y un campo se puede definir como un conjunto de caracteres que están separados de otros campos por un separador de campo interno.

Si está familiarizado con Unix/Linux o programa bash shell, entonces debe saber qué variable de separador de campo interno (IFS) es. Los IFS predeterminados en Awk son tabulación y espacio.

Así es como funciona la idea de separación de campos en Awk: cuando encuentra una línea de entrada, de acuerdo con el IFS definido, el primer conjunto de caracteres es el campo uno, al que se accede usando $1, el segundo conjunto de caracteres es el campo dos, que se accede mediante $2, el tercer conjunto de caracteres es el campo tres, al que se accede mediante $3 y así sucesivamente hasta el último conjunto de caracteres.

Para comprender mejor la edición de este campo Awk, echemos un vistazo a los ejemplos a continuación:

Ejemplo 1: he creado un archivo de texto llamado tecmintinfo.txt.

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Luego, desde la línea de comando, trato de imprimir el primer, segundo y tercer campo del archivo tecmintinfo.txt usando el siguiente comando:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

En la salida anterior, puede ver que los caracteres de los primeros tres campos se imprimen según el IFS definido, que es el espacio:

  1. Se accede al campo uno que es "TecMint.com" usando $1 .
  2. Se accede al campo dos que es "es" mediante $2 .
  3. Se accede al campo tres, que es "el", mediante $3 .

Si lo ha notado en la salida impresa, los valores del campo no están separados y así es como se comporta la impresión por defecto.

Para ver la salida claramente con espacio entre los valores de campo, debe agregar el operador (,) de la siguiente manera:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Una cosa importante a tener en cuenta y recordar siempre es que el uso de ($) en Awk es diferente de su uso en scripts de shell.

En shell scripting, ($) se usa para acceder al valor de las variables, mientras que en Awk ($) se usa solo cuando se accede al contenido de un campo, pero no para acceder al valor de las variables.

Ejemplo 2: Echemos un vistazo a otro ejemplo usando un archivo que contiene varias líneas llamado my_shoping.list.

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

Supongamos que solo desea imprimir Unit_Price de cada artículo en la lista de compras, deberá ejecutar el siguiente comando:

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awk también tiene un comando printf que le ayuda a formatear su salida, es una buena forma, ya que puede ver que la salida anterior no es lo suficientemente clara.

Usando printf para formatear la salida de Item_Name y Unit_Price:

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

Resumen

La edición de campos es muy importante cuando se usa Awk para filtrar texto o cadenas, le ayuda a obtener datos particulares en columnas de una lista. Y recuerde siempre que el uso del operador ($) en Awk es diferente al de las secuencias de comandos de shell.

Espero que el artículo te haya sido útil y, si necesitas información adicional o preguntas, puedes publicar un comentario en la sección de comentarios.