Extraire des données à partir du fichier log avec perl

Fermé
rimrita Messages postés 18 Date d'inscription lundi 31 mars 2014 Statut Membre Dernière intervention 15 avril 2014 - 31 mars 2014 à 21:46
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 1 avril 2014 à 12:59
bsr
j'ai un fichier log que je doit extraire des donnés spécifiques tel que: status, from, to
mon fichiers ets de la forme:
Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) dsn=5.0.0, status=sent at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/anvil[***]: statistics: max connection count 1 for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/***[****]: statistics: max cache size 1 at Mar 2 04:02:19
Mar 2 04:18:32 smtp /***[****]: ****: from=<rim@gmail>, size=98171, nr=9 (queue active)
Mar 2 04:18:32 smtp [****]: ****: from=<rita@com>, size=166151, npt=88 (queue active)
Mar 2 04:18:32 smtp [***]; Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/anvil[***]: statistics: max connection count 1 for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/***[****]: statistics: max cache size 1 at Mar 2 04:02:19
Mar 2 04:18:32 smtp /***[****]: ****: from=<rim@gmail>, size=98171, nr=9 (queue active)
Mar 2 04:18:32 smtp [****]: ****: from=<rita@com>, size=166151, npt=88 (queue active)
Mar 2 04:18:32 smtp [***]Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/anvil[***]: statistics: max connection count 1 for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/***[****]: statistics: max cache size 1 at Mar 2 04:02:19
Mar 2 04:18:32 smtp /***[****]: ****: from=<rim@gmail>, size=98171, nr=9 (queue active)
Mar 2 04:18:32 smtp [****]: ****: from=<rita@com>, size=166151, npt=88 (queue active)
Mar 2 04:18:32 smtp [***]Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/anvil[***]: statistics: max connection count 1 for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/***[****]: statistics: max cache size 1 at Mar 2 04:02:19
Mar 2 04:18:32 smtp /***[****]: ****: from=<rim@gmail>, size=98171, nr=9 (queue active)
Mar 2 04:18:32 smtp [****]: ****: from=<rita@com>, size=166151, npt=88 (queue active)
Mar 2 04:18:32 smtp [***]Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/anvil[***]: statistics: max connection count 1 for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/***[****]: statistics: max cache size 1 at Mar 2 04:02:19
Mar 2 04:18:32 smtp /***[****]: ****: from=<rim@gmail>, size=98171, nr=9 (queue active)
Mar 2 04:18:32 smtp [****]: ****: from=<rita@com>, size=166151, npt=88 (queue active)
Mar 2 04:18:32 smtp [***]Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/anvil[***]: statistics: max connection count 1 for (smtp:127.0.0.1) at Mar 2 04:02:19
Mar 2 04:05:40 smtp postfix/***[****]: statistics: max cache size 1 at Mar 2 04:02:19
Mar 2 04:18:32 smtp /***[****]: ****: from=<rim@gmail>, size=98171, nr=9 (queue active)
Mar 2 04:18:32 smtp [****]: ****: from=<rita@com>, size=166151, npt=88 (queue active)
Mar 2 04:18:32 smtp [***] dsn=1.1.1, status=sent

mon essay ne marche tjrs pas:

use strict;
use warnings;

open LIRE,"fichier_test.txt"
or die "E/S : $!\n";

my @tmp = <LIRE>;
my @log = grep {/status/} @tmp;

grep {s/.*(from\s*to).*(status.*)/$1: $2/} @log;
print map {$_->[0]}

map {[$_,(split /=/)[1]]};

<>;
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
1 avril 2014 à 12:59
Salut rimrita,

ton code ne compile pas en raison d'un erreur de syntaxe dans ton dernier "map".

Sinon, au stade de ton premier grep, compte tenu du fichier source que tu indiques, tu te contentes de capturer dans @log les deux lignes suivantes :

Mar 2 04:05:40 smtp postfix/anvil[16419]: statistics: max connection rate 1/60s for (smtp:127.0.0.1) dsn=5.0.0, status=sent at Mar 2 04:02:19
Mar 2 04:18:32 smtp [***] dsn=1.1.1, status=sent

Je doute que ce soit vraiment ce que tu souhaites faire, vu que tu sembles vouloir matcher from, to et status.

Donne une source correcte (courte mais représentative) et un exemple de sortie souhaitée.


Dal
0