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 :

organiser un fichier log avec perl


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Par défaut organiser un fichier log avec perl
    Créer un script perl qui reçoit en argument 2 fichiers logs et génère un fichier output.

    Exemple Input:
    00:05:02 postfix/clea:0002:9999:2:1
    3DE2710057: message-id=<20091213230502.3DE2710057@linux.local>

    Exemple Output:
    postfix/clea|0002|9999|2|1|3DE2710057: message-id=<20091213230502.3DE2710057@linux.local>|15/12/2009 00:05:02|15/12/2009 00:005:02|1

    mon problème pour le moment est le suivant:
    1) comment normaliser toute les lignes de fichier input (suppression d'espace)
    2) concaténation des 2 lignes.

    please some help!! thx
    Best Regards.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    J'ai du mal à comprendre toute la logique de transformation/merge des log d'entrée en un log de sortie.

  3. #3
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Par défaut
    oui c'est un peu compliqué!
    step1 : je veux concaténer 2 lignes (pour tt le texte).
    step2 : je veux normaliser les ligne, par exemple pour une ligne:

    00:05:02 postfix/clea:0002:9999:2:1 3DE2710057: message-id=<20091213230502.3DE2710057@linux.local>

    je supprime les espaces et les remplace par des "|" et en même temps ignorer cette étape pour un certain bloc exemple : 3DE2710057: message-id=<20091213230502.3DE2710057@linux.local>

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Tout ceci est très facile a réaliser, mais tu n'as toujours pas décrit correctement ta problématique. Notamment, dans ta normalisation, je constate d'après ton 1er message, que ce ne sont pas uniquement les espaces qui sont transformés en |, mais également les :
    De même, il faut que tu décrives avec précision la zone d'exclusion pour cette normalisation.
    Enfin, il faut que tu donnes un exemple de chaque fichier log, et avec des données cohérentes (et si possible les identifier clairement dans l'exemple de sortie, par des couleurs par exemple) car ta concaténation dans le message 1 semble plus complexe que ton explication (disparition de la date, concaténation de plusieurs lignes en une seule, ...).

  5. #5
    Membre averti
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Par défaut
    bon je veux prendre le travail step par step.
    les 2 fichiers log sont de la même forme ( dans une étape ultérieure je dois déterminer le nbre d'occurance des ligne) mais pour le moment je m’intéresse pour le 1er fichier: chaque bloc d'information est écrit sur deux ligne et qui doit être afficher en sortie sur une seul ligne. par exemple:

    input:

    00:05:02 postfix/clea:0002:9999:2:1
    3DE2710057: message-id=<20091213230502.3DE2710057@linux.local>

    output:

    postfix/clea|0002|9999|2|1|3DE2710057: message-id=<20091213230502.3DE2710057@linux.local>|15/12/2009 00:05:02|15/12/2009 00:005:02|1

    les incolores on peut les ignoré pour le moment. la séparation entres les elts doit etre avec "|" . se qui me gêne le plus c'est que dans une ligne de départ la séparation entre les éléments n'est pas unique.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Question : d'où sortent les éléments en noir dans le fichier de sortie ? (15/12/2009 avant l'heure du fichier d'entrée, 15/12/2009 00:005:02|1).

    Il est impossible de les ajouter sans savoir d'où ils sont extraits.

    Si l'on omet ces valeurs inconnues, le reste peut sans doute être réalisé ainsi :

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    my @log;
    while (<>) {
      chomp;
      push @log, $_;
      if (@log == 2) {
        my ($time, $path, @data) = $log[0] =~ /([\d:]+)\s+(.*?):(.*?):(.*?):(.*?):(.+)/;
        print join "|", $path, @data, $log[1], $time;
        print "\n";
      }
    }

Discussions similaires

  1. 2 applis pour 1 seul fichier log avec log4j
    Par doudou13 dans le forum Logging
    Réponses: 5
    Dernier message: 12/12/2010, 16h44
  2. recuperer un fichier log en perl
    Par koukia dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2008, 02h20
  3. monter un fichier iso avec Perl
    Par BerSerK dans le forum Web
    Réponses: 3
    Dernier message: 18/12/2007, 08h36
  4. Réponses: 6
    Dernier message: 14/06/2007, 15h36
  5. Manipulation d'un fichier XML avec Perl
    Par brahak dans le forum Modules
    Réponses: 3
    Dernier message: 01/05/2006, 22h36

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