awk
Procesa y extrae columnas de texto según patrones.
Lee texto línea por línea, lo parte en campos (columnas) y te deja trabajar con cada uno. Lo usas para extraer datos, sumar números, filtrar líneas o procesar logs. En Debian el awk que viene instalado es mawk; si necesitas funciones exclusivas de GNU awk, instala el paquete gawk.
Sintaxis
awk [opciones] SCRIPT ARCHIVO...§ 1
Despiece
6 ejemplosImprimir la segunda columna
Imprimir la segunda columna
3 piezas
Lámina01 / 06
Comandoawk '{print $2}' datos.txt
Piezas3
Escala1:1
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | awk | Comando | El comando para procesar texto por columnas. |
| 2 | '{print $2}' | Valor | Script: imprime el segundo campo ($2) de cada línea. |
| 3 | datos.txt | Argumento | Archivo con datos separados por espacios. |
Resultado
Muestra solo la segunda columna de cada línea.
Imprimir líneas con número mayor a 100
3 piezas
Lámina02 / 06
Comandoawk '$3 > 100 {print $0}' reporte.txt
Piezas3
Escala1:1
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | awk | Comando | El comando para procesar texto por columnas. |
| 2 | '$3 > 100 {print $0}' | Valor | Imprime línea completa solo si campo 3 > 100. |
| 3 | reporte.txt | Argumento | Archivo con datos numéricos. |
Resultado
Muestra solo las líneas cuya tercera columna supera 100.
Imprimir líneas que coinciden con patrón
3 piezas
Lámina03 / 06
Comandoawk '/error/ {print}' log.txt
Piezas3
Escala1:1
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | awk | Comando | El comando para procesar texto por columnas. |
| 2 | '/error/ {print}' | Valor | Solo procesa líneas que contienen 'error' y las imprime. |
| 3 | log.txt | Argumento | Archivo de log a procesar. |
Resultado
Muestra solo las líneas del log que contienen la palabra error.
Sumar una columna
3 piezas
Lámina04 / 06
Comandoawk '{s+=$3} END {print s}' ventas.txt
Piezas3
Escala1:1
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | awk | Comando | El comando para procesar texto por columnas. |
| 2 | '{s+=$3} END {print s}' | Valor | Suma campo 3 en cada línea y al final imprime el total. |
| 3 | ventas.txt | Argumento | Archivo con números en la tercera columna. |
Resultado
Muestra la suma total de la columna 3.
Imprimir columnas con texto fijo
3 piezas
Lámina05 / 06
Comandoawk '{print $1 ":" $3}' usuarios.txt
Piezas3
Escala1:1
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | awk | Comando | El comando para procesar texto por columnas. |
| 2 | '{print $1 ":" $3}' | Valor | Imprime campo 1, dos puntos y campo 3. |
| 3 | usuarios.txt | Argumento | Archivo con datos por columnas. |
Resultado
Muestra pares como 'juan:admin' usando los dos puntos como separador visual.
Usar otro separador de campos
4 piezas
Lámina06 / 06
Comandoawk -F: '{print $1}' /etc/passwd
Piezas4
Escala1:1
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | awk | Comando | El comando para procesar texto por columnas. |
| 2 | -F: | Opción | Usa los dos puntos como separador de campos en vez de los espacios. |
| 3 | '{print $1}' | Valor | Script: imprime el primer campo de cada línea. |
| 4 | /etc/passwd | Argumento | El archivo de cuentas del sistema, con campos separados por dos puntos. |
Resultado
Muestra los nombres de usuario del sistema, uno por línea: root, daemon, bin, etc.
§ 2
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -F | Define el separador de campos. Ejemplo: -F: para archivos separados con dos puntos, -F, para CSV sencillos. |
| -v | Asigna una variable antes de ejecutar el script. Ejemplo: -v limite=100. |
| -f | Lee el script desde un archivo en lugar de escribirlo en la línea de comandos. |
§ 3
Fallas comunes
| Falla | Remedio |
|---|---|
| Confundir comillas en shell | El script suele tener espacios o llaves; usa comillas simples: '{print $2}' para que el shell no lo rompa. |
| Usar $1 fuera de contexto o con separador incorrecto | Verifica el separador de campos (-F) o si los espacios son múltiples. awk trata espacios múltiples como un solo separador por defecto. |
| Olvidar END para totales | Para sumar, haz acumulación por línea y el total en END: '{s+=$3} END {print s}'. |
| Comparar valores que traen texto pegado, como 10MB > 9MB. | Si el campo no es un número limpio, awk lo compara como texto y "10MB" queda antes que "9MB". Quita las unidades primero o fuerza el número con $1+0. |
§ 4
Preguntas frecuentes
- ¿Qué es awk y para qué sirve?
- awk es un lenguaje pequeño para procesar texto por columnas. Sirve para extraer campos, filtrar líneas por patrones, hacer cálculos y generar reportes. En Debian viene mawk como awk; en otras distros suele ser gawk, y lo básico funciona igual en los dos.
- ¿Cuál es la diferencia entre awk y sed?
- sed trabaja línea por línea con reemplazos y borrados. awk trabaja por campos (columnas) y permite hacer operaciones matemáticas y condicionales.
- ¿Cómo extraigo una columna con awk?
- Usa $1 para la primera columna, $2 para la segunda, etc. Ejemplo: awk '{print $2}' archivo.txt.
- ¿Cómo cambio el separador en awk?
- Con la opción -F. Por ejemplo, para archivos CSV con comas: awk -F, '{print $1}' archivo.csv.
- ¿Cómo sumo una columna en awk?
- Acumulas en una variable y usas END para imprimir el total: awk '{s+=$3} END {print s}' archivo.txt.
§ 5