Búsqueda de sitios web

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


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

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 campos interno.

Si está familiarizado con Unix/Linux o realiza programación de shell bash, entonces debe saber qué es la variable separadora de campo interna (IFS). 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, según 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, al que se accede usando $2, el tercer conjunto de caracteres es el campo tres, al que se accede usando $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 siguientes:

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

vi tecmintinfo.txt
cat tecmintinfo.txt

Luego, desde la línea de comando, intento imprimir los campos primero, segundo y tercero del archivo tecmintinfo.txt . usando el siguiente comando:

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

TecMint.comisthe

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

  1. Al campo uno, que es “TecMint.com ”, se accede usando $1.
  2. Al campo dos, que es “es”, se accede usando $2.
  3. Al campo tres, que es “el”, se accede usando $3.

Si ha notado en la salida impresa, los valores de los campos no están separados y así es como se comporta la impresión de forma predeterminada.

Para ver el resultado 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 el script de shell, ($) 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 utilizando 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 desea imprimir solo el Precio_Unitario 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 manera, 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 utiliza Awk para filtrar texto o cadenas, ya que 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 le haya resultado útil y, si necesita información adicional o tiene preguntas, puede publicar un comentario en la sección de comentarios.