Hoy traigo a estos apuntes para que no se nos olvide un truco de magia con AWK. Para los que conocemos este lenguaje en bash, la mayoría lo hacemos para filtrar alguna columna dentro de algún log. Yo lo uso mucho sobre los logs de apache para sacar las IP’s las peticiones, los códigos de respuesta….

Me ocurrió hace muy poco que analizando el log de la recolección de basura de una máquina virtual de java el tiempo de las recolecciones venía reflejado en milisegundos a contar desde el último reinicio del servidor Tomcat. Me interesaba en ese momento medir la frecuencia entre una recolección y otra puesto que podía medir el incremento en milisegundos, pero no se me ocurría un modo ágil de hacerlo y tampoco quería ponerme a hacer un script para una información que no estaba seguro de que fuera a servirme. Por suerte y tras buscar un poco me encontré con esta información que cito como fuente:

http://www.unix.com/shell-programming-and-scripting/130727-how-subtract-adjacent-lines-single-column.html

La propuesta es usar el propio AWK como un almacén de variables que van siendo tratadas línea tras línea:

awk 'p{print $0-p}{p=$0}' file

Con esto conseguiremos ir viendo la resta que hay entre cada valor y el anterior. Lo fascinante de esto es que opera sobre la misma columna y usa un resultado que el propio script ha generado durante su ejecución sin tener que realizar bucles for ni operaciones más costosas.

 

Anuncios

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

w

Conectando a %s