Attualmente sto eseguendo uno script awk per elaborare un file di accesso-log di grandi dimensioni (8,1 GB), e ci vorrà un'eternità per finire. In 20 minuti, ha scritto 14 MB di MB (1000 + - 500), mi aspetto che scriva, e mi chiedo se posso elaborarlo molto più velocemente in qualche modo.Elaborazione rapida dei log di apache
Ecco lo script awk:
#!/bin/bash awk '{t=$4" "$5; gsub("[\[\]\/]"," ",t); sub(":"," ",t);printf("%s,",$1);system("date -d \""t"\" +%s");}' $1
EDIT:
Per i non awkers, lo script legge ogni riga, ottiene le informazioni sulla data, lo modifica in un formato del l'utility date
riconosce e chiama per rappresentare la data come il numero di secondi dal 1970, restituendola infine come una riga di un file .csv, insieme all'IP. Ingresso
Esempio: 189.5.56.113 - - [22/Gen/2010: 05: 54: 55 0100] uscita "GET (...)"
restituiti: 189.5.56.113, 124237889
Forse si potrebbe descrivere quello che lo script fa così noi non-awkers puoi scrivere una sostituzione più veloce in un'altra lingua?Da un colpo d'occhio però, la generazione di un nuovo processo tramite system() su ogni record deve essere piuttosto lenta. –