IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Traitement de logs apache vers fichier CSV


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Par défaut Traitement de logs apache vers fichier CSV
    Bonjour,

    Je suis issu du dev web et je débute en shell. J'aimerai créer un script Perl qui sera éxécuter avec un cron et qui fera le travail suivant:

    Parser un fichier de log apache:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ::1 - - [21/Apr/2009:09:38:52 +0200] "GET /.gif&utilisation=1&acces=1@stats=2 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:53 +0200] "GET /.gif&utilisation=1&acces=1@stats=3 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:57 +0200] "GET /.gif&utilisation=1&acces=2@carotte=2 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:59 +0200] "GET /.gif&utilisation=1&acces=1@patate=8 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    :1 - - [21/Apr/2009:09:38:59 +0200] "GET /.gif&utilisation=1&acces=1@patate=8 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    Afin de créer un nouveau fichier CSV qui affichera mes logs de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # ----------------------------------------
    # Table
    # ----------------------------------------
    /.gif&utilisation=1&acces=1@stats=2, 1
    /.gif&utilisation=1&acces=1@stats=3, 1
    /.gif&utilisation=1&acces=2@carotte=2, 1
    /.gif&utilisation=1&acces=1@patate=8, 2
    # --------------------------------------------------------------------------------
    Il faudrait donc que j'écrive dans ce nouveau CSV en regroupant les lignes identiques et en indiquant leur nombre par le compteur (en gras sur l'exemple)

    Dur dur... pouvez-vous m'aider? merci d'avance


    merci d'avance

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Il te faut lire le fichier ligne à ligne et à base de regex, tu peux ce que tu veux.
    Essaye de lire nos cours et FAQ.

    Je t'ai fais un code :

    test.log
    ::1 - - [21/Apr/2009:09:38:52 +0200] "GET /.gif&utilisation=1&acces=1@stats=2 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:53 +0200] "GET /.gif&utilisation=1&acces=1@stats=3 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:57 +0200] "GET /.gif&utilisation=1&acces=2@carotte=2 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:59 +0200] "GET /.gif&utilisation=1&acces=1@patate=8 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    :1 - - [21/Apr/2009:09:38:59 +0200] "GET /.gif&utilisation=1&acces=1@patate=8 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    # Parsing
    my $InputLog = 'test.log';
    open (LOG, '<', $InputLog) or die("Impossible de lire $InputLog\n");
    my %Occurence;
    while ( my $Ligne = <LOG> ) {
      chomp $Ligne;
      my ($Url) = $Ligne =~ m{get\s*(.+)\s*HTTP/}i;
      $Occurence{$Url} ++;  
    }
    close(LOG);
     
    # CSV
    my $Output = 'test.csv';
    open (CSV, '>', $Output) or die("Impossible d'ecrire dans $Output\n");
    foreach my $occ ( keys %Occurence ) {
      print CSV "$occ, $Occurence{$occ}\n";
    }
    close(CSV);
     
    print "Fin\n";
    SORTIE test.csv
    /.gif&utilisation=1&acces=1@patate=8 , 2
    /.gif&utilisation=1&acces=1@stats=3 , 1
    /.gif&utilisation=1&acces=2@carotte=2 , 1
    /.gif&utilisation=1&acces=1@stats=2 , 1

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Par défaut
    merci, ca marche

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    oublie pas le tag résolu

Discussions similaires

  1. Exporter une <table> vers fichier CSV
    Par sebhm dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 17/04/2014, 15h33
  2. [AC-2007] PB Export vers fichier .csv
    Par Daniel-Gérald dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/11/2011, 10h54
  3. Export vers fichier csv d'un grid
    Par Tiolebucheron dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 18/07/2010, 21h35
  4. Réponses: 2
    Dernier message: 24/09/2009, 09h49
  5. [A-03] Export vers fichier CSV (format)
    Par Pownee dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/02/2009, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo