[shell] filter un fichier de log en fonction du reférant...

filter un fichier de log en fonction du reférant... [shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 30-12-2003 à 14:53:04    

Attention les yeux "la buse" is back, et je suis de plus en plus fou :D
 
Ce que je veux faire est simple à priori :
 
Filtrer un ficher de log pour n'inclure que l'activité des internautes venant d'un certain site (google par exemple).
 
La première chose à laquelle on pense c'est un simple grep :
 

Code :
  1. grep "http://www.google" access.log


 
Mais c'est pas bon car après le premier hit, le référent n'est plus "http://www.google..." mais une page de mon site. Le grep ne renvoi donc que le premier hit :(
 
 
 
J'ai donc penser à faire ceci :
- récupérer les adresses IP des gens venant de google comme ceci :
 
awk '$11 ~/http:\/\/www.google/ {print $1}' access.log | sort | uniq
 
ce qui me donne une liste d'adresse IP, et ensuite faire un grep sur chaque adresse IP de la liste sur le fichier de log et recomposer un fichier (que je "sort" par date ensuite).
 
Mais cette partie là ne me plait pô, c'est pô bô.
 
Je suppose que tout cela est faisable avec awk, mais étant une buse, je ne vois pas comment...
 
 
help please...
 
 
 
 
 
EDIT :
 
Je suis bien sûr conscient qu'une solution basée sur l'adresse IP seule implique une certaine marge d'erreur.
Une fois que cette solution fonctionnera j'essaierais de l'améliorer pour utiliser le couple adresse IP + User Agent.


Message édité par duch le 30-12-2003 à 15:31:32
Reply

Marsh Posté le 30-12-2003 à 14:53:04   

Reply

Marsh Posté le 30-12-2003 à 16:57:40    

bon ben j'ai trouvé :D
 
pour ceux que ça interessent :
 

Code :
  1. awk 'BEGIN {ip[0]="";ua[0]="";id=0}{if (match($11, "http://www.google" )){ip[id] = $1;ua[id] = $12;id+=1;print $0;}else{for(i=0;i<id;i++){if((ip[i] == $1) && (ua[i] == $12)) print $0}}}' access.log


 
 
et je fais le test sur l'ip ET le user agent, donc risque d'erreur minime.


Message édité par duch le 30-12-2003 à 16:59:21
Reply

Marsh Posté le 31-12-2003 à 11:53:45    

et pour ceux que ça interessent vraiment, j'ai fait une nouvelle version (il faut dire que celle-ci était mon premier awk) qui est 45 fois plus rapide :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed