2011-04-15 13 views
13

Tengo un par de archivos de registro de Apache que se han agregado juntos y debo ordenarlos por fecha. Están en el siguiente formato:¿Cómo puedo ordenar un archivo de registro de Apache por fecha?

"www.company.com" 192.168.1.1 [01/Jan/2011:00:04:17 +0000] "GET /foobar/servlet/partner/search/results?catID=1158395&country=10190&id=5848716&order_by=N-T&order_by_dir=-&product=10361996&siteID=1169823&state= HTTP/1.1" 200 10459 0 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" 

¿Cuál es la mejor manera de hacerlo en la línea de comandos de Linux?

+0

¿Quizás mover esto a ServerFault o unix.stackexchange.com? – ohmantics

Respuesta

27
#!/bin/sh 
if [ ! -f $1 ]; then 
    echo "Usage: $0 " 
    exit 
fi 
echo "Sorting $1" 
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 $1 > $2 
+0

¡Esta es una excelente respuesta! ¡Gracias! – dotancohen

+0

Interesante. La página man no deja en claro que puede usar "M" como parte de una clave de clasificación; ¡Gracias por señalar esto! – offby1

+0

Excelente respuesta y funciona perfectamente para los registros de Apache, que de hecho es el campo 4, suponiendo que el separador predeterminado es un espacio. Pasar unos minutos en las páginas de clasificación de hombres me ayudó a entender este comando y me siento seguro de escribir mis propios géneros. También para agregar para otros lectores, esto está usando rangos de caracteres del campo 4 dado en orden en el que desea que se clasifique. -k 4.9,4.12n es el año 'n' indica el género numérico, -k 4.5,4.7M es el tipo de abreviatura de mes de 3 letras y M le dice que haga exactamente eso. @ offby1 lo muestra como una opción pero el ejemplo no es genial. – Arturski

7

Esto es casi demasiado trivial para señalar, pero solo en caso de que confunde a nadie: la respuesta de GRM técnicamente debe utilizar el campo # 3, no 4, para que coincida con el formato de registro exacto de la pregunta. Es decir, se debe leer:

sort -t ' ' -k 3.9,3.12n -k 3.5,3.7M ... 

Su respuesta es correcta en todos los demás aspectos, y se puede utilizar tal cual para el formato de registro común.

+0

quizás esto hubiera sido mejor como un comentario, pero es correcto, así que tengo algunos puntos de internet :) – STW

0

Me di cuenta de esto con ejemplos en línea, hojeando el libro 'La línea de comandos de Linux, páginas man, y por ensayo y error:

sort -k 3.9nb -k 3.5Mb -k 3.2nb [location and name of file] 

El B junto con el N o M se detendrá especie de leer caracteres que no tienen sentido como/y: lo que hace la vida más fácil cuando el espacio ya se usa como delimitador y aún tiene que separar por:, /, y/o cualquier otro carácter que desee golpear al ordenar.

El script anterior ordenará por año primero, luego por mes y luego por fecha. Coloque una r junto a todas las b para descender.

Cuestiones relacionadas