Comando AWK aplicado

Comando AWK aplicado

Recientemente un amigo se encontró con la necesidad de extraer ciertos datos de un archivo log, específicamente algunos campos para obtener estadísticas relevantes. El contenido del archivo, llamado errores.log, tenía un formato similar al siguiente:

[23/Jul/2022:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2022 08:49:30,862] - EventID = launchApplication
[23/Jul/2022:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2022 08:49:30,863] - ActionID = null
[23/Jul/2022:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2022 08:49:30,863] - Adding appID=109
...

El objetivo era extraer las líneas que contenían la información de Username y AppCommandLine.

Para resolver esta tarea, utilizamos la herramienta AWK.

¿Qué es AWK?

AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean archivos o flujos de datos. Se trata de un lenguaje de búsqueda y procesamiento de patrones, lo que significa que es capaz de buscar un patrón específico dentro de un archivo y realizar operaciones definidas en función de ese patrón. Es especialmente útil para el procesamiento de archivos organizados en columnas y para realizar cálculos y operaciones con esos datos.

A diferencia de comandos Unix como grep y sed, que se enfocan en filtrar y procesar texto, AWK incorpora su propio lenguaje de programación, lo que le permite ofrecer operaciones aritméticas, relaciones lógicas y manejo de variables. Esto significa que con AWK se pueden desarrollar programas más complejos que procesen la entrada estándar o un archivo, y llevar a cabo tareas como el tratamiento de archivos de texto como si fueran bases de datos. El lenguaje de programación AWK incluye declaraciones como for, while, if-else, así como un conjunto de funciones y variables incorporadas.

Utilizando AWK para extraer datos

Para extraer los campos Username y AppCommandLine del archivo errores.log, utilizaremos el siguiente comando en la terminal:

$ awk '/Username/ || /AppCommandLine=/{print $1" "$6, $7}' errores.log >> depurado.log

Explicación del comando:

  • awk: Invoca la herramienta AWK.
  • '/Username/ || /AppCommandLine=/': Especifica los patrones que buscamos en cada línea. La condición indica que si la línea contiene Username o AppCommandLine=, se realizará la operación definida.
  • {print $1" "$6, $7}: Esta es la acción que AWK llevará a cabo cuando se cumpla la condición. En este caso, imprimirá el primer campo (fecha) seguido del sexto y séptimo campo que contienen la información relevante.
  • errores.log: Es el nombre del archivo de entrada que será procesado por AWK.
  • >> depurado.log: Redirecciona la salida del comando a un archivo llamado depurado.log, donde se almacenarán los resultados.

Con este comando, los campos Username y AppCommandLine se extraerán y guardarán en el archivo depurado.log, lo que permitirá reducir considerablemente el tamaño del archivo y obtener solo la información necesaria para futuras análisis y presentaciones.

Conclusión

AWK es una herramienta poderosa y versátil para el procesamiento de datos basados en texto. Su capacidad para buscar patrones y realizar operaciones específicas lo convierte en una herramienta valiosa para tareas de extracción, filtrado y análisis de datos. En combinación con otras herramientas y lenguajes, AWK se convierte en un recurso invaluable para aquellos que trabajan con archivos de texto y necesitan obtener información relevante de manera eficiente.

Para aprender más sobre AWK y explorar todas sus capacidades, puedes consultar la Guía del Usuario de GNU Awk. Además, siempre puedes utilizar el comando man awk en tu terminal para acceder al manual completo de AWK y así descubrir todas sus opciones y posibilidades. ¡Aprovecha esta poderosa herramienta para simplificar tus tareas de procesamiento de datos!