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


En esta parte de nuestra serie de comandos de 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 está haciendo una programación de shell bash, debería 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 , el segundo conjunto de caracteres es el campo dos, al que se accede usando , el tercer conjunto de caracteres es el campo tres, al que se accede utilizando y así sucesivamente hasta el último juego de caracteres).

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

rojo

# vi tecmintinfo.txt
# cat tecmintinfo.txt

Luego, desde la línea de comandos, trato de 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 la salida anterior, puede ver que los caracteres de los tres primeros campos se imprimen según el IFS definido, que es el espacio:

  1. Field one which is “TecMint.com” is accessed using $1.
  2. Field two which is “is” is accessed using $2.
  3. Field three which is “the” is accessed using $3.

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

Para ver claramente la salida 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 siempre recordar es que el uso de ($) en Awk es diferente de su uso en shell scripting.

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

rojo

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		

Digamos 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 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 usa Awk para filtrar texto o cadenas, le ayuda a obtener datos particulares en columnas en una lista. Y siempre recuerde que el uso del operador ($) en Awk es diferente al de los scripts de shell.

Espero que el artículo haya sido útil para usted y para cualquier información adicional o preguntas, puede publicar un comentario en la sección de comentarios.

Todos los derechos reservados © Linux-Console.net • 2019-2021