Contar requests por IP de un access_log de Apache en BASH

Apache Web Server

Apache Web Server

Bueno, en mi último post publiqué un script muy sencillo en Python para contar la cantidad de requests por IP en un access_log de Apache. Como sospechaba, había una forma quizás más sencilla y más óptima de hacer lo mismo en BASH, así que hace un rato jugando un poco me salió y se los muestro aquí.

# cat /var/log/httpd/access_log |awk '{print($1)}'|sort |uniq -c |sort

¿Cómo funciona?

Lo primero que hacemos es abrir el archivo con cat, el contenido se pasa a awk con el cual obtenemos la primera columna (lo mismo lo podríamos hacer con cut, pero estoy más acostumbrado a awk). Eso nos devuelve la lista de las IPs. Eso lo pasamos a sort que ordena las IPs antes de poder pasarselo a uniq. Éste último comando, con el parámetro -c se ocupa de contar las líneas repetidas en un listado ordenado (por eso el sort anterior). Y por último le volvemos a pasar todo a sort para que lo ordene en forma ascendente de acuerdo a la cantidad de ocurrencias de cada IP.

En realidad el script de Python lo ordenaba al revés (en forma descendente), para ello deberíamos pasarle el parámetro “-r” al último sort.

Espero que les sea de utilidad. La versión de Python queda sobre todo como base por si es necesario hacer algo un poco más interesante jeje.

Bookmark and Share
Comentar

2 Comentarios.

  1. Gracias por ese post!! me has salvado de flotar en un limbo mental eterno xD

Comentar


[ Ctrl + Enter ]

Trackbacks y Pingbacks: