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

  FORUM HardWare.fr
  Programmation
  Perl

  comment extraire des données spécifique du fichier log

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment extraire des données spécifique du fichier log

n°2223858
rita9999
Posté le 02-04-2014 à 15:00:31  profilanswer
 

je veux extraire des données spécifique du fichier log de la forme:

 
Mar  2 04:18:32 smtp postfix/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=deferred (host ****.****[1****.***.***.***] said: 55 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Mar  2 05:19:06 s p/cleanup[****]: 0: message-id=<****@nnnn>
Mar  2 04:18:32 smtp postfix/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=deferred (host ****.****[1****.***.***.***] said: 55 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Mar  2 05:19:06 s p/cleanup[****]: 0: message-id=<****@nnnn>
Mar  2 04:18:32 smtp postfix/smtp[****]: 1****.***.***.***: to=<****@****>, relay=1****.***.***.***[1****.***.***.***]:25, delay=****, delays=******, dsn=4.1.2, status=deferred (host ****.****[1****.***.***.***] said: 55 1 <.1.2*****@****>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Mar  2 05:19:06 s p/cleanup[****]: 0: message-id=<****@nnnn>
 
[]je veux récupérer le msg-id ,status, relay [/]
 
mon essai ne mache toujours pas je suis null

mood
Publicité
Posté le 02-04-2014 à 15:00:31  profilanswer
 

n°2223869
gilou
Modérateur
Modzilla
Posté le 02-04-2014 à 15:13:20  profilanswer
 

Et vous avez écrit quoi comme code perl pour le moment?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2223870
rita9999
Posté le 02-04-2014 à 15:17:10  profilanswer
 

j'ai commencé par ceci:
 
#!/usr/bin/perl
use strict;use warnings;
my $filename = "fichier_test.txt";
 
open LIRE,"fichier_test.txt"
     or die "E/S : $!\n";
 
my @tmp = <LIRE>;
my @log = grep {/status/} @tmp;
 
grep {s/.*(message-id\s*relay).*(status.*)/$1: $2/} @log;
print map  {$_->[0]}
       
      map  {[$_,(split /=/)[1]]}
   
<>;

n°2223871
gilou
Modérateur
Modzilla
Posté le 02-04-2014 à 15:18:36  profilanswer
 

Bon, je dois aller planter des fraisiers :D je vous réponds à mon retour, dans un peu moins d'une heure.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2223875
rita9999
Posté le 02-04-2014 à 15:21:18  profilanswer
 

je vous attend, have a nice time  
A+

n°2223906
gilou
Modérateur
Modzilla
Posté le 02-04-2014 à 16:36:01  profilanswer
 

#!/usr/bin/perl
use strict;
use warnings;
use autodie;
 
my $filename = 'fichier_test.txt';
 
open my $fh, "<", $filename;
 
while (<$fh> ) {
 # et ici on va faire des choses ligne à ligne
}
close $fh;
 
Bon, déjà, vous ne pouvez pas récupérer les message-id, relay et status sur une même ligne, vu que les message-id sont sur une ligne et les relay et status sur une autre.
Donc votre fichier est structuré comment?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2223931
rita9999
Posté le 02-04-2014 à 19:29:34  profilanswer
 

il y'a des ligne qui n'ont pas de message id lorsque leurs status est regected c.à.d <> send

n°2223932
gilou
Modérateur
Modzilla
Posté le 02-04-2014 à 19:47:11  profilanswer
 

Ce sont les seules que vous avez donné en exemple.
 
Bon, vous voulez afficher quoi au final?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2223933
rita9999
Posté le 02-04-2014 à 19:57:04  profilanswer
 

il y'a des ligne qui n'ont pas les delay, message-id, status ils nous interresse pas je veux juste afficher ces données à partir des lignes qu'ils contient
A+

n°2223946
gilou
Modérateur
Modzilla
Posté le 02-04-2014 à 21:39:31  profilanswer
 

OK!
Mais une ligne complète, en exemple, ça aurait aidé.
Sans plus d'infos sur la structure de vos lignes de log, je ne peux que proposer qque chose comme:
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my $filename = 'fichier_test.txt';
  7.  
  8. open my $fh, "<", $filename;
  9.  
  10. while (<$fh> ) {
  11. if (/message-id=<([^>]+)>.*relay=([^,]+),.*status=(\S+)/) {
  12.   print "$1 - $2 - $3\n";
  13.  }
  14. }
  15. close $fh;


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 02-04-2014 à 21:39:31  profilanswer
 

n°2223947
rita9999
Posté le 02-04-2014 à 21:43:43  profilanswer
 

On a pas besoin d'utiliser grep?

n°2223948
gilou
Modérateur
Modzilla
Posté le 02-04-2014 à 22:03:26  profilanswer
 

Je n'en vois pas l'utilité ici.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2223949
rita9999
Posté le 02-04-2014 à 22:09:03  profilanswer
 

oki, votre code n'a rien affiché  j'ai modifié comme ça mais en vain
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
 
my $filename = 'fichier_test.txt';
 
open my $fh, "<", $filename;
 
while (<$fh> ) {
my $line = $_;
 if ($line =~ /message-id=<([^>]+)>.*relay=([^,]+),.*status=(\S+)/) {
   print "delays=$1, status=$2 , message-id=$3 \n\n";
  }
}
close $fh;
<>;

n°2223951
rita9999
Posté le 02-04-2014 à 22:13:50  profilanswer
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. my $filename = 'fichier_test.txt';
  6. open my $fh, "<", $filename;
  7. while (<$fh> ) {
  8. my $line = $_;
  9. if ($line =~ /message-id=<([^>]+)>.*relay=([^,]+),.*status=(\S+)/) {
  10.    print "relays=$1, status=$2 , message-id=$3 \n\n";
  11.   }
  12. }
  13. close $fh;
  14. <>;

n°2224008
gilou
Modérateur
Modzilla
Posté le 03-04-2014 à 11:10:18  profilanswer
 

On pourrait savoir pourquoi vous rajoutez un <>; totalement inutile en fin de programme?
 
et faire  
my $line = $_;
if ($line =~ /message-id=<([^>]+)>.*relay=([^,]+),.*status=(\S+)/) {
 
c'est exactement comme faire  
if (/message-id=<([^>]+)>.*relay=([^,]+),.*status=(\S+)/) {
mais en moins efficace.
 
A la limite si vous tenez a une variable $line faites plutôt
while (my $line = <$fh> ) {
if ($line =~ /message-id=<([^>]+)>.*relay=([^,]+),.*status=(\S+)/) {
ça sera un peu plus efficace  (mais un peu moins qu'utiliser les variables par défaut comme $_)
 
A+,


Message édité par gilou le 03-04-2014 à 11:18:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2224010
gilou
Modérateur
Modzilla
Posté le 03-04-2014 à 11:12:39  profilanswer
 

> votre code n'a rien affiché  j'ai modifié comme ça mais en vain  
 
Ben oui, puisque je suis obligé de deviner à l'aveugle la structure de vos lignes de log.
C'est pourtant pas faute d'avoir demande à ce que vous m'en fournissiez une ou deux de valables.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  comment extraire des données spécifique du fichier log

 

Sujets relatifs
télécharger un fichier CSV d'une manière automatiqueFileExists retourne true alors que le fichier n'existe plus !
Importer des données d'une table importée à une autre table[Problème Maro Vba ] Exporter une colonne en fichier Texte.
créer un fichier zip et le téléchargercréation de fichier excel selon critère
[JAXB] Générer un Schema XSD à partir d'un fichier XML[VBA] Problème actualisation des données
Quelle solution pour créer une base de données ?[PHP] Quelle API pour utiliser les données de localisation ?
Plus de sujets relatifs à : comment extraire des données spécifique du fichier log


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