Perl: variable dans tableau ??
Résolu
LezardMoo
Messages postés
554
Date d'inscription
Statut
Membre
Dernière intervention
-
LezardMoo Messages postés 554 Date d'inscription Statut Membre Dernière intervention -
LezardMoo Messages postés 554 Date d'inscription Statut Membre Dernière intervention -
Bonsoir tout le monde,
je suis entrain (enfin j'essaye, je viens de tout supprimer pour tout recommencer) de faire un petit script d'analyse de log.
J'ai un problème, je n'arrive pas à mettre le contenu d'une variable dans un tableau...
Je sais que c'est simple mais je suis confronté à une situation arrachage de tiffs !!
En gros, je parse un fichier de cette forme
Jan 12 01:08:34 testmail postfix/pickup[16791]: 720D544594: uid=0 from=<root>
Jan 12 01:08:34 testmail postfix/pickup[16791]: 720D544594: uid=0 from=<clem>
...
...
je veux récupérer les noms root et clem, jusqu'ici tout va bien
Bon, mon problème se situe ici => $userSplit[1]
un
C'est ca que j'aimerais mettre dans un tableau pour pouvoir compter le nombre de root ou de clem...
seulement si je passe la variable en tableau, avec un split alors j'ai bien un tableau certes seulement seule la cellule [0] contient la liste des users, alors que je cherche à récupérer un user par ligne...
Quelqu"un aurait une idée ???
Parce que la je sèche complet, j'ai pas envie de passer sous bash(meme si mon script serait deja fini et en prod depuis longtemps ^^j'ai envie d'apprendre Perl !)
Surtout que quand j'aurais la solution, le reste du script ira touuuuut seul.
Voilà merci d'avance à tout le monde ( : ( :
je suis entrain (enfin j'essaye, je viens de tout supprimer pour tout recommencer) de faire un petit script d'analyse de log.
J'ai un problème, je n'arrive pas à mettre le contenu d'une variable dans un tableau...
Je sais que c'est simple mais je suis confronté à une situation arrachage de tiffs !!
En gros, je parse un fichier de cette forme
Jan 12 01:08:34 testmail postfix/pickup[16791]: 720D544594: uid=0 from=<root>
Jan 12 01:08:34 testmail postfix/pickup[16791]: 720D544594: uid=0 from=<clem>
...
...
je veux récupérer les noms root et clem, jusqu'ici tout va bien
open(MAIL,"<$mailog") or die("err open $mailog");
while (my $lines = <MAIL>) {
if($lines =~ m/$date/){
if ($lines =~ /([0-9]+:[0-9]+:[0-9]+)/){
&users($lines);
}
}
}
sub users{
my @userSplit = split(/</, $_[0]);
print $userSplit[1];
}
Bon, mon problème se situe ici => $userSplit[1]
un
donne
print $userSplit[1]
root>
root>
root>
root>
root>
root>
root>
clem>
C'est ca que j'aimerais mettre dans un tableau pour pouvoir compter le nombre de root ou de clem...
seulement si je passe la variable en tableau, avec un split alors j'ai bien un tableau certes seulement seule la cellule [0] contient la liste des users, alors que je cherche à récupérer un user par ligne...
Quelqu"un aurait une idée ???
Parce que la je sèche complet, j'ai pas envie de passer sous bash(meme si mon script serait deja fini et en prod depuis longtemps ^^j'ai envie d'apprendre Perl !)
Surtout que quand j'aurais la solution, le reste du script ira touuuuut seul.
Voilà merci d'avance à tout le monde ( : ( :
A voir également:
- Perl: variable dans tableau ??
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- DzSoft Perl Editor - Télécharger - Édition & Programmation
- Comment lire un fichier .pl perl ? - Forum Windows
- Perl: transformer un fichier en package ✓ - Forum Perl
4 réponses
Salut LezardMoo,
Est-ce cela que tu veux faire :
Dal
Est-ce cela que tu veux faire :
#!/usr/bin/perl use strict; use warnings; my $st = q(root> root> root> root> root> root> root> clem>); # capture globale des occurrences de suites de # tous caractères consécutifs mais pas de > my @matches = ($st =~ /([^>]+)/g); print @matches;
Dal
arf Dal je t'ai rédigé une réponse mais ne l'ai pas posté...
Donc en fait c'est bien ce que je voudrais mais le problème c'est que ma variable $userSplit[1] n'est pas une liste.
Si je fais par exemple
@tab = split(/>/, $userSplit[1]);
j'obtiens bien un split a ce niveau />/
ce qui va me donner
root
root
root
root
root
root
seulement, si je fais print $tab[0];
je vais avoir ca qui sort
root
root
root
root
root
root
donc par logique si je fais print $tab[1]
ERREUR
Donc ce que je voudrais c'est un moyen de récupérer cette "liste" à raison d'un root par cellule.
$tab[0]; => root
$tab[1]; => root
$tab[2]; => root
et ainsi de suite.
Je ne sais pas si j'ai été assez clair, la tout de suite j'ai la tete dans HA/DRDB donc je suis pas à fond sur le dev, si tu as besoin de précision n'hésite pas
Merci Dal
Donc en fait c'est bien ce que je voudrais mais le problème c'est que ma variable $userSplit[1] n'est pas une liste.
Si je fais par exemple
@tab = split(/>/, $userSplit[1]);
j'obtiens bien un split a ce niveau />/
ce qui va me donner
root
root
root
root
root
root
seulement, si je fais print $tab[0];
je vais avoir ca qui sort
root
root
root
root
root
root
donc par logique si je fais print $tab[1]
ERREUR
Donc ce que je voudrais c'est un moyen de récupérer cette "liste" à raison d'un root par cellule.
$tab[0]; => root
$tab[1]; => root
$tab[2]; => root
et ainsi de suite.
Je ne sais pas si j'ai été assez clair, la tout de suite j'ai la tete dans HA/DRDB donc je suis pas à fond sur le dev, si tu as besoin de précision n'hésite pas
Merci Dal
Voici le retour de
print Dumper($userSplit[1]);
exit;
$VAR1 = 'root>
';
Que dois je en conclure ?
Parce que si je fait une analyse simple de la sortie je comprend que je devrait normalement pouvoir récup les autres valeurs une a une en les mettant dans un tableau, suis je sur la bonne voie ?
print Dumper($userSplit[1]);
exit;
$VAR1 = 'root>
';
Que dois je en conclure ?
Parce que si je fait une analyse simple de la sortie je comprend que je devrait normalement pouvoir récup les autres valeurs une a une en les mettant dans un tableau, suis je sur la bonne voie ?