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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Parse de log avec awk

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parse de log avec awk

n°2104760
astakiller
It's a trap
Posté le 04-10-2011 à 21:42:54  profilanswer
 

Hello,  
 
J'ai un petit soucis avec mes parses de logs, j'aimerai passer par awk pour faire ça mais la je bloque.
Je m'explique, normalement on lis le fichier ligne par ligne on extrait les champs, mais j'aimerai avoir le nombre de connexion sur une page/un site pour chaque IP et faire une moyenne de traffic pour cette page
 
Ex de mon fichier :  
 
id_connexion date heure port nom_page traffic ip  
 
1 10/11/10 12h30 80 index.php 280 10.120.111.1
2 16/11/10 10h35 80 test.php 288 10.129.111.1
3 19/11/10 11h54 80 index.php 390 10.120.111.1
4 28/12/10 22h28 80 index.php 400 10.120.111.9
 
En gros j'aimerai savoir combien de fois index.php a été visité et la moyenne de traffic pour cette page afin d'obtenir un truc du genre :  
 
page moyenne visités
index.php 1070 3
 
Je pensais commencer avec sort nom_page puis sort ip histoire de faciliter le traitement qui va suivre.
Et appliquer des filtres sur la sortie pour garder les 5 pages les plus visités (nombre de visites) puis en volume avec la moyenne par volume et l'inverse.  
 
Après est ce possible d'avoir la répartition du traffic pour l'adresse 10.120.111.1 ou les adresses ip contenant 120 qui passent sur les sites les plus visités ?
 
Accessoirement, on peut pas faire d'histogramme en mode console avec awk ?
 
-
 
Vu la taille potentielle des logs que je vais avoir, mettre ça dans une BDD n'est pas envisageable même si j'aurais été bien plus à l'aise avec des where et des group by et en théorie sur le papier et des modèles de maths ça marche très bien.
 
Merci d'avance de votre aide.

mood
Publicité
Posté le 04-10-2011 à 21:42:54  profilanswer
 

n°2104846
gilou
Modérateur
Modosaurus Rex
Posté le 05-10-2011 à 11:42:24  profilanswer
 

Utilises plutôt perl, qui est parfait pour faire cela.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°2104854
astakiller
It's a trap
Posté le 05-10-2011 à 12:21:46  profilanswer
 

L'ennuie c'est que je n'y connais rien du tout en programmation et donc en perl.

n°2104887
gilou
Modérateur
Modosaurus Rex
Posté le 05-10-2011 à 14:39:29  profilanswer
 

Tu peux voir perl comme du Awk survitaminé.
Si tu sais faire du SQL (> si j'aurais été bien plus à l'aise avec des where et des group by) tu peux apprendre le perl de base sans pb.
 
Un petit exemple qui va calculer la somme du traffic pour chaque page (identifiée par son IP et nom de page):

Code :
  1. #!/usr/bin/perl
  2.  
  3. # error-check flags
  4. use strict;
  5. use warnings;
  6. # Use readable built-in names
  7. use English qw( -no_match_vars );
  8.  
  9. my %traffic; # un hash qui va avoir pour clé une chaine concaténée de l'IP et du nom de page
  10.                  # et pour valeur (incrémentale), le traffic
  11. my $filename = 'logdata.txt'; # fichier des données ou j'ai mis les 4 lignes que tu as donné
  12. open(my $fh, '<', $filename) or die "$filename: fichier pas trouve!"; # ouverture en lecture
  13. while (<$fh> ) {
  14.  # expression régulière de ta ligne de données
  15.   if (/^(\d+)\s+(\d\d\/\d\d\/\d\d)\s+(\d\dh\d\d)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\d+\.\d+\.\d+\.\d+)\s*$/o) {
  16.     # maintenant tu as tes champs dans les variables $1, $2...$7
  17.     # a toi d'en faire usage
  18.     $traffic{$7.' '.$5} += $6; # somme avec la valeur courante
  19.  }
  20. }
  21. close $fh;
  22.  
  23. # maniere standard de parcourir un hash
  24. foreach my $key (keys %traffic) {
  25.  print "IP and page: $key, traffic: $traffic{$key}\n";
  26. }

C:\Perl>perl logdata.pl
IP and page: 10.120.111.9 index.php, traffic: 400
IP and page: 10.120.111.1 index.php, traffic: 670
IP and page: 10.129.111.1 test.php, traffic: 288


 
A+,


Message édité par gilou le 05-10-2011 à 14:40:47

---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Parse de log avec awk

 

Sujets relatifs
function parse()Error Parse PHP ... :-( Wikimedia
problème formulaire envoie d'un get au lieu d'un post...parse ligne par ligne
Parse error dans un script de vérification de formulaireparse error php
Problème parse error[Resolu] Parse error
requete SQL parse timestamp => 2 champs stringparse error
Plus de sujets relatifs à : Parse de log avec awk


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)