Actualmente estoy ejecutando una secuencia de comandos awk para procesar un gran archivo de acceso-registro (8.1 GB), y está tardando mucho en terminar. En 20 minutos, escribió 14 MB del (1000 + - 500) MB que espero que escriba, y me pregunto si puedo procesarlo mucho más rápido de alguna manera.Procesando registros de apache rápidamente
Aquí es el script awk:
#!/bin/bash awk '{t=$4" "$5; gsub("[\[\]\/]"," ",t); sub(":"," ",t);printf("%s,",$1);system("date -d \""t"\" +%s");}' $1
EDIT:
Para los no awkers, la secuencia de comandos lee cada línea, obtiene la información de fecha, lo modifica a un formato que el La utilidad date
reconoce y lo llama para representar la fecha como la cantidad de segundos desde 1970, y finalmente la devuelve como una línea de un archivo .csv, junto con la IP.
Ejemplo de entrada: 189.5.56.113 - - [22/Ene/2010: 05: 54: 55 0100] salida de "Get (...)"
devuelto: 189.5.56.113, 124237889
Tal vez podría describir lo que el guión lo hace nosotros no awkers puede escribir un reemplazo más rápido en otro idioma?Sin embargo, desde un vistazo, generar un nuevo proceso a través del sistema() en cada registro debe ser bastante lento. –