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:
- Al campo uno, que es “TecMint.com ”, se accede usando
$1
. - Al campo dos, que es “es”, se accede usando
$2
. - 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.