El comando AWK es una herramienta potente y versátil para procesar y transformar datos de texto en Linux. Ya sea que necesite extraer información, filtrar líneas, reformatear la salida o realizar cálculos, AWK puede simplificar su trabajo con solo unas pocas líneas de código. En este artículo, aprenderá a usar el comando AWK para la manipulación de texto en Linux.
¿Qué es el comando AWK?

El comando AWK es un lenguaje de programación interpretado que se ejecuta en la terminal de Linux. Su nombre proviene de las iniciales de sus creadores: Alfred Aho, Peter Weinberger y Brian Kernighan. AWK se diseñó originalmente para gestionar archivos estructurados con campos separados por delimitadores, como archivos CSV o /etc/passwd. Sin embargo, AWK también puede manipular archivos de texto más complejos, como archivos HTML o XML. AWK no es un lenguaje de programación orientado a objetos , pero permite la definición de funciones y variables locales y globales. También cuenta con estructuras de control como bucles y sentencias condicionales.
La sintaxis general del comando AWK es la siguiente:
awk [opciones] 'programa' [archivos]
El programa es una secuencia de instrucciones que define los patrones a buscar en cada línea del archivo y las acciones a realizar al encontrarlo. Las opciones permiten modificar el comportamiento del comando AWK, como elegir el delimitador de campo o el formato de salida.
¿Cómo imprimo texto usando el comando AWK?

El comando AWK permite imprimir un mensaje en la terminal según un patrón en el texto. Si se ejecuta el comando AWK sin ningún patrón y solo con un comando de impresión, AWK imprimirá el mensaje cada vez que se presione Intro.
Por ejemplo, si escribes:
awk '{imprimir "Hola"}'
Y si presionas Enter varias veces, obtendrás:
Hola, hola, hola
Para detener el comando AWK, puede presionar Ctrl+C.
Si desea imprimir el contenido de un archivo con el comando AWK, puede usar el patrón especial `BEGIN` , que se ejecuta antes de leer el archivo, y el patrón especial `END` , que se ejecuta después de leerlo. Por ejemplo, si tiene un archivo llamado `test.txt` que contiene:
Esto es una prueba. AWK es una gran herramienta. Linux es el mejor sistema operativo
Puede imprimir el contenido del archivo utilizando el siguiente comando:
awk 'BEGIN {print "Aquí está el contenido del archivo test.txt:"} {print} END {print "Fin del archivo"}' test.txt
Lo que da:
Aquí está el contenido del archivo test.txt: Esto es una prueba. AWK es una herramienta excelente. Linux es el mejor sistema operativo. Fin del archivo
comando {print} sin argumentos imprime la línea completa. También puede imprimir un campo específico usando la variable $n , donde n es el número del campo. Por defecto, los campos se separan con espacios o tabulaciones, pero puede cambiar el delimitador con la -F .
Por ejemplo, si desea imprimir el primer y tercer campo del /etc/passwd , que están separados por dos puntos ( :) , puede utilizar el siguiente comando:
awk -F: '{imprimir $1 " " $3}' /etc/passwd
Lo que da algo como:
raíz 0 demonio 1 bin 2 sys 3 sync 4 juegos 5 man 6 lp 7 correo 8 noticias 9 uucp 10 proxy 13 www-data 33 ...
También puede imprimir expresiones aritméticas o cadenas con el comando AWK. Por ejemplo, si desea imprimir el cuadrado del segundo campo del archivo test.txt , puede usar el siguiente comando:
awk '{imprimir $2^2}' prueba.txt
Lo que da:
tiene 16 años
Si desea imprimir el número de líneas del archivo test.txt , puede usar la variable especial NR , que contiene el número de línea actual. Por ejemplo, puede usar el siguiente comando:
awk 'FIN {imprimir NR}' prueba.txt
Lo que da:
3
¿Cómo filtrar texto usando el comando AWK?

El comando AWK permite filtrar texto según patrones o condiciones. Si se especifica un patrón antes de una acción, AWK solo ejecutará la acción si se encuentra en la línea. El patrón puede ser una expresión regular, una comparación, una operación lógica o una combinación de estas.
Por ejemplo, si desea imprimir las líneas del test.txt que contienen la palabra Linux , puede utilizar el siguiente comando:
awk '/Linux/ {print}' prueba.txt
Lo que da:
Linux es el mejor sistema operativo
Si desea imprimir las líneas en el /etc/passwd que tienen un UID mayor a 1000, puede usar el siguiente comando:
awk -F: '$3 > 1000 {imprimir}' /etc/passwd
Lo que da algo como:
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin tss:x:131:142:Pila de software TPM,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/inexistente:/bin/false snap_daemon:x:584788:584788::/inexistente:/bin/false ...
También puede usar los operadores lógicos && (y), || (o) y ! (no) para combinar patrones. Por ejemplo, si desea imprimir las líneas del /etc/passwd que tienen un UID mayor que 1000 y un shell distinto de /usr/sbin/nologin , puede usar el siguiente comando:
awk -F: '$3 > 1000 && $7 != "/usr/sbin/nologin" {imprimir}' /etc/passwd
Copiar
Lo que da algo como:
tss:x:131:142:Pila de software TPM,,,:/var/lib/tpm:/bin/false _rpc:x:132:65534::/run/rpcbind:/usr/sbin/nologin statd:x:133:65534::/var/lib/nfs:/usr/sbin/nologin libvirt-qemu:x:64055:139:Libvirt Qemu,,,:/var/lib/libvirt:/usr/sbin/nologin libvirt-dnsmasq:x:134:144:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/usr/sbin/nologin snapd-range-524288-root:x:524288:524288::/inexistente:/bin/false snap_daemon:x:584788:584788::/inexistente:/bin/false ...
¿Cómo editar texto usando el comando AWK?

El comando AWK permite modificar texto mediante funciones integradas o variables especiales. Por ejemplo, si desea reemplazar espacios con guiones en el archivo test.txt , puede usar la gsub , que reemplaza todas las apariciones de una cadena por otra. También puede usar la OFS , que define el separador de campos de salida. Por ejemplo, puede usar el siguiente comando:
awk '{print strftime("%d/%m/%Y %H:%M:%S",$1 " " $2)}' prueba.txt
Lo que da:
30/10/2021 16:13:49
31/10/2021 17:14:50
01/11/2021 18:15:51
Puede consultar el manual de comandos AWK para conocer otras funciones y variables disponibles.
¿Cómo utilizar el bucle for con el comando AWK?
El comando AWK permite ejecutar bucles for en los campos o líneas de un archivo. La sintaxis del bucle for es la siguiente:
para (variable en matriz) acción
Donde variable es el nombre de la variable que toma sucesivamente los valores del array , y accion es la acción a realizar en cada iteración.
Por ejemplo, si desea imprimir los campos de un archivo en orden inverso, puede usar un bucle for con la variable especial NF , que contiene el número de campos en la línea actual. Por ejemplo, si tiene un archivo llamado test.txt que contiene:
Esto es una prueba. AWK es una gran herramienta. Linux es el mejor sistema operativo
Puede invertir el orden de los campos con el siguiente comando:
awk '{para (i=NF; i>0; i--) imprimir $i}' prueba.txt
Lo que da:
Una prueba es esta formidable herramienta; otra es AWK; el mejor sistema operativo es Linux

También puede usar el bucle for para iterar las líneas de un archivo con la variable especial FNR , que contiene el número de línea del archivo actual. Por ejemplo, si desea imprimir las líneas pares del archivo test.txt , puede usar el siguiente comando:
awk 'FNR%2==0 {imprimir FNR}' prueba.txt
Lo que da:
2
4
¿Cómo ejecuto un script AWK?
Para ejecutar un script AWK, puede colocarlo en un archivo con la .awk y otorgarle permisos de ejecución con el comando chmod +x . Luego, puede ejecutar el script con el comando ./script_name.awk [files] .
Por ejemplo, si tiene un script llamado hello.awk que contiene:
#!/usr/bin/awk -f BEGIN {imprimir "Hola"}
Puede ejecutar el script con el siguiente comando:
./hola.awk
Lo que da:
Buen día
¿Cómo paso argumentos a un script AWK?

Para pasar argumentos a un script AWK, puede utilizar dos métodos:
- El primer método implica usar la
-vcon el formatovariable=valor. Por ejemplo, si desea pasar dos argumentos llamadosvar1yvar2a suhello.awk, puede usar el siguiente comando:
awk -v var1=hola -v var2=mundo -f hola.awk
En tu hello.awk , puedes acceder a los argumentos usando las variables $var1 y $var2 . Por ejemplo, si tu script contiene:
#!/usr/bin/awk -f BEGIN {imprimir $var1 " " $var2}
Obtendrás:
Hola Mundo
- El segundo método implica usar la matriz especial
ARGV, que contiene los argumentos pasados al script. Por ejemplo, si desea pasar dos argumentos sin nombre a suhello.awk, puede usar el siguiente comando:
awk -f hola.awk hola mundo
En tu hello.awk , puedes acceder a los argumentos usando los índices ARGV[1] y ARGV[2] . Por ejemplo, si tu script contiene:
#!/usr/bin/awk -f BEGIN {imprimir ARGV[1] " " ARGV[2]}
Obtendrás:
Hola Mundo
Preguntas frecuentes
¿Cuál es la diferencia entre AWK y GAWK?
GAWK es una implementación GNU de AWK, que agrega características adicionales al lenguaje original, como soporte para expresiones regulares extendidas, matrices multidimensionales o funciones predefinidas.
¿Cómo depuro un script AWK?
opción -W con el lint , que muestra mensajes de advertencia sobre posibles errores en el script. También puede usar la -W con el dump-variables , que muestra los valores de las variables al final de la ejecución del script.
¿Cómo uso el comando AWK para ordenar datos?
Para usar el comando AWK para ordenar datos, puede usar el `sort` en combinación con AWK. Por ejemplo, si desea ordenar los usuarios en el `/etc/passwd` por su UID, puede usar el siguiente comando:
awk -F: '{imprimir $1, $3}' /etc/passwd | sort -n -k2
Al combinar AWK con otros comandos (aquí sort ), puede ir mucho más allá en la visualización y organización de datos.
¿Cómo imprimo el número de palabras en un archivo usando el comando AWK?
Para imprimir el número de palabras de un archivo con el comando AWK, puede usar la variable especial NF , que contiene el número de campos en la línea actual, y la variable especial NR , que contiene el número de línea actual. Con un bucle for, puede contar el número de palabras en cada línea y sumarlas a una variable llamada total . Con el patrón especial END , puede imprimir el resultado final. Por ejemplo, si tiene un archivo llamado test.txt que contiene:
Esto es una prueba. AWK es una gran herramienta. Linux es el mejor sistema operativo
Puede imprimir el número de palabras en el archivo utilizando el siguiente comando:
awk '{para (i=1; i<=NF; i++) total++} FIN {imprimir total}' prueba.txt
Lo que da:
9
¿Cómo uso el comando AWK para extraer datos de un archivo CSV?
Para usar el comando AWK y extraer datos de un archivo CSV (valores separados por comas), puede usar la -F para establecer una coma como separador de campos. Por ejemplo, si tiene un archivo llamado test.csv que contiene:
Apellido, nombre, edad: Alice Dupont, 25; Bob Martin, 32; Charles Durand, 28
Puede extraer el nombre y la edad de las personas utilizando el siguiente comando:
awk -F"," '{imprimir $1 " " $3}' prueba.csv
Lo que da:
Nombre, edad: Alice 25, Bob 32, Charles 28
¿Cómo filtrar datos usando el comando AWK?
El comando AWK permite filtrar datos según patrones, que son expresiones regulares o condiciones lógicas. Los patrones se colocan antes de las acciones, separados por llaves. Por ejemplo, si desea mostrar las líneas del archivo test.csv que contienen el nombre Alice , puede usar el siguiente patrón:
awk -F"," '/Alice/ {imprimir}' prueba.csv
Lo que da:
Alicia, Dupont, 25 años
Si desea mostrar las líneas en el test.csv que tienen más de 30 años, puede utilizar el siguiente patrón:
awk -F"," '$3 > 30 {imprimir}' prueba.csv
Lo que da:
Bob, Martín, 32 años
Puede combinar varios patrones usando los operadores lógicos && (y), || (o) y ! (no). Por ejemplo, si desea mostrar líneas en el archivo test.csv cuyo nombre empiece por C o cuya antigüedad sea inferior a 10 años, puede usar el siguiente patrón:
awk -F"," '($1 ~ /^C/) || ($3 < 10) {imprimir}' prueba.csv
Lo que da:
CAMILLE,M,7 CLARA,F,11 CLEMENT,M,7
¿Cómo calcular estadísticas usando el comando AWK?
El comando AWK permite calcular estadísticas sobre los datos numéricos de un archivo, como la suma, el promedio, el mínimo o el máximo. Para ello, simplemente use variables para almacenar los valores intermedios y actualizarlos en cada línea. Con el patrón especial END , puede mostrar el resultado final. Por ejemplo, si desea calcular la suma y el promedio de las edades en el archivo test.csv , puede usar el siguiente programa:
awk -F"," 'NR>1 {suma+=$3; conteo++} END {imprimir "Suma: " suma; imprimir 'Promedio: 'suma/conteo}' test.csv
Lo que da:
Total: 110 Promedio: 18.3333
Explicación:
-
-F","se utiliza para definir el separador de campo como una coma. - Utilizamos la condición
NR>1para ignorar la primera línea del archivo, que contiene los nombres de las columnas. - Usamos las variables
sumayrecuentopara acumular la suma y el número de edades. Usamos el operador+=para incrementar las variables con el valor del tercer campo ($3). - patrón
ENDoperador/para calcular el promedio dividiendo la suma entre el número.
De manera similar, si desea calcular las edades mínima y máxima en el test.csv , puede utilizar el siguiente programa:
awk -F"," 'NR>1 {si (mín=="") mín=máx=$3; si ($3<min) min=$3; if ($3> máx.) máx.=$3} FIN {imprimir "Mín.: " min; imprimir 'Máx.: 'máx.}' test.csv
Lo que da:
Mín: 6 Máx: 32
Explicación:
-
-F","se utiliza para definir el separador de campo como una coma. - Utilizamos la condición
NR>1para ignorar la primera línea del archivo, que contiene los nombres de las columnas. - Usamos las variables
minymaxSi están vacías («"inicializamos estas variables con el valor del tercer campo ($3. Usamos los operadores<y>para comparar los valores y actualizar las variables si es necesario. - El
ENDpara mostrar el resultado final.
Conclusión
El comando AWK es una herramienta esencial para manipular texto en Linux. Permite realizar tareas complejas con tan solo unas líneas de código, como extraer, filtrar, modificar o calcular datos. Ofrece gran flexibilidad gracias a sus patrones, acciones, funciones y variables. Se puede combinar con otros comandos de Linux para ampliar sus capacidades. Por ejemplo, se puede usar el comando Echo en Windows para mostrar un mensaje o una variable en la pantalla. Si desea obtener más información sobre el comando AWK, puede consultar el manual o los numerosos tutoriales disponibles en línea.


