Comando sort
Hace tiempo, me encontré en la necesidad de ordenar por fecha varios logs de apache de distintos vhosts.
Aprovecho esta oportunidad para mostrar la eficacia del comando sort.
Tomemos como ejemplo, una linea cualquiera de uno de los logs de apache:
192.168.1.23 - - [02/Jun/2008:17:26:46 +0200] “GET /index.php HTTP/1.1″ 200 8199 “http://www.prueba.com/” “Mozilla/4.0″
La idea es ordenarlos por fecha, para ello, tomaremos los espacios como separadores y nos centraremos en el campo 4. Dentro del campo 4, tenemos que ordenar por el siguiente orden, año, mes, día, hora, minutos y segundos.
El comando quedaría así:
sort -t ' ' -k 4.9,4.12n -k 4.5,4.7M -k 4.2,4.3n -k 4.14,4.15n -k 4.17,4.18n -k 4.20,4.21n vhost1.access.log vhost2.access.log vhostX.access.log
Por sino lo véis a simple vista, entramos un poco en detalle con las opciones de sort.
- Fijamos como limitador el espacio:
-t ' '
- Dentro del campo 4, del caracter 9 al 12 (año), lo ordenamos por número:
-k 4.9,4.12n
- Dentro del campo 4, del caracter 5 al 7 (mes), lo ordenamos por mes:
-k 4.5,4.7M
- Dentro del campo 4, del caracter 2 al 3 (día), lo ordenamos por número:
-k 4.2,4.3n
- Dentro del campo 4, del caracter 14 al 15 (hora), lo ordeamos por número:
-k 4.14,4.15n
- Dentro del campo 4, del caracter 17 al 18 (minuto), lo ordenamos por número:
-k 4.17,4.18n
- Dentro del campo 4, del caracter 20 al 21 (segundo), lo ordenamos por número:
-k 4.20,4.21n
- Finalmente, especificamos los ficheros a ordenar:
vhost1.access.log vhost2.access.log vhostX.access.log





