Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1218 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°382140
duch
Posté le 30-12-2003 à 14:53:04  profilanswer
 

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
mood
Publicité
Posté le 30-12-2003 à 14:53:04  profilanswer
 

n°382253
duch
Posté le 30-12-2003 à 16:57:40  profilanswer
 

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
n°382571
duch
Posté le 31-12-2003 à 11:53:45  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
fichier dust.exe qui manqueautoriser un utilisateur à lire un fichier [Résolu]
fichier bin[ Shell ] Se connecter au net via modem 56k
[boot] cd de boot avec un fichier en plus[MDK 9.2] PhpMyAdmin : où se trouve le fichier de configuration ?
[MDK9.2, question bête] modifier un fichier en mode consoleOu trouver le fichier .config pour compiler mon noyaux ?
[ MPLAYER ] ça plante quand je charge un fichier de sous-titres !acces fichier en réseau depuis win98 vers mandrake
Plus de sujets relatifs à : [shell] filter un fichier de log en fonction du reférant...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR