Comando Awk aplicado

Hace poco mi amigo Fabian tenía la necesidad de sacar unos datos de un archivo log. Mas específicamente unos campos
para obtener estadísticas. el contenido del archivo (llamado errores.log) se veía mas o menos así:

[23/Jul/2007:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2007 08:49:30,862] – EventID = launchApplication
[23/Jul/2007:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2007 08:49:30,863] – ActionID = null
[23/Jul/2007:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2007 08:49:30,863] – Adding appID=109
[23/Jul/2007:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2007 08:49:30,863] – Starting to process the event …
[23/Jul/2007:13:49:30] info ( 7298): CORE3282: stdout: INFO [23 Jul 2007 08:49:30,863] – Setting state to MyDesktop
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: TAWSHELL=rsh
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: Username=pepejefe
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: AppServerName=192.168.1.2
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: AppCommandLine=/apps/dir1/di2/app.sh
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: AppServerOS=Linux
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: ProtocolType 0
[23/Jul/2007:13:49:31] info ( 7298): CORE3282: stdout: UseProxy 0

Necesitaba extraer las lineas con la información del Username y del AppCommandLine.
Aquí entra en acción la herramienta AWK

AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos.awk es un lenguaje de búsqueda y procesamiento de patrones. Esto quiere decir que awk es capaz de buscar un patrón dentro de un archivo (al igual que grep) y tratarlo según unas operaciones determinadas. Con awk se pueden desarrollar auténticos programas.

Según esto awk es capaz de procesar un archivo con datos organizados por columnas y generar nuevas columnas con los valores resultantes de realizar ciertos cálculos u operaciones.

A diferencia de comandos Unix como grep y sed, que filtran y procesan texto, awk incorpora su propio lenguaje de programación, siendo capaz de ofrecer operaciones aritméticas, relaciones lógicas y variables. Se pueden desarrollar programas con awk que procesen la entrada estándar o un archivo, realizando tareas como tratar archivos de texto como bases de datos. El lenguaje de programación awk incluye estamentos como for, while e if-else, así como un conjunto de funciones y variables incorporadas.

Algunos enlaces para saber más opciones sobre esta herramienta pueden ser:

  • The GNU Awk User’s Guide
  • Guía interesante con opciones y ejemplos de Awk

Mas información? recuerda, el man (man awk) y google son tus amigos:

Antes de entrar en materia primero se debe señalar que el separador por defecto de awk es el espacio.
El comando seria entonces:
$ awk ‘/Username/||/AppCommandLine=/{print $1″ “$6,$7}’ errores.log >> depurado.log

Extraigo los campos Username o AppCommandLine. El doble pipe “||” es el operador OR y los
campos $1 (fecha) y $6 y $7 que tienen la información necesaria. Todo esto lo envío al archivo
depurado.log

De esta manera un archivo de 146 mb conteniendo muchos campos no útiles se convierte en 850 kb de útiles resultados que pueden ser pasados a una hoja de calculo (Openoffice obviamente) para su organización y presentación.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s