Je suis en train de lancer un script awk pour traiter un gros fichier journal d'accès (8.1Go), et ça prend une éternité à finir. En 20 minutes, il a écrit 14 Mo du (1000 + - 500) Mo que je m'attendais à écrire, et je me demande si je peux le traiter beaucoup plus rapidement d'une manière ou d'une autre.Traitement rapide des journaux apache
Voici le script awk:
#!/bin/bash awk '{t=$4" "$5; gsub("[\[\]\/]"," ",t); sub(":"," ",t);printf("%s,",$1);system("date -d \""t"\" +%s");}' $1
EDIT:
Pour les non-awkers, le script lit chaque ligne, reçoit les informations de date, modifie un format de la L'utilitaire date
le reconnaît et l'appelle pour représenter la date en tant que nombre de secondes depuis 1970, pour finalement la renvoyer sous la forme d'une ligne d'un fichier .csv, avec l'adresse IP.
entrée Exemple: 189.5.56.113 - - [22/Jan/2010: 05: 54: 55 +0100] "GET (...)"
sortie Retourné: 189.5.56.113, 124237889
Peut-être que vous pourriez décrire ce que le script ne nous donc non-awkers peut écrire un remplacement plus rapide dans une autre langue?D'un coup d'œil cependant, engendrer un nouveau processus via system() sur chaque enregistrement doit être assez lent. –