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

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] Récupérer des données dans un fichier txt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] Récupérer des données dans un fichier txt

n°2161946
steph0805
Posté le 30-10-2012 à 11:05:51  profilanswer
 

Bonjour à tous,
 
Alors voila mon problème, je doit faire un script pour le monitorage d'un serveur apache.
Je fait exécuter à mon script la commande "apachectl fullstatus" enregistre la sortie dans un fichier txt jusque la tout va bien. Le problème est après je doit parser ce fichier et récupérer des données et les affectés à des variables.
 
Voila ce que j'ai besoin de récupérer :
 
.0435 requests/sec - 66 B/second
 
1 requests currently being processed, 49 idle workers
 
index usage: 0%, cache usage: 0%
 
ajp hostname Init Ok 1 0 0 0 0
 
En gras les valeurs que je doit récupérer (qui bien sur ne sont pas toujours les mêmes).
 
Niveau code j'avais commencer un petit truc mais j'ai des doutes pour la recherche. Voila mon code pour le début :
 
#!C:\Perl\bin -w
 
 
# ========================================
# Execution de la commande et enregistrement du resultat dans un fichier
 
my $commande = "apachectl fullstatus";
my $resultat = '$commande > resultat.txt';
print $resultat;
close "resultat.txt";
 
my $file = "resultat.txt";
open FICHIER,"<$file";
 
# ========================================
# Recherche du nombres de requêtes par seconde
 
my $substring = "requests/sec";
my $reqpsec;
while ($_ = <FILE> ){
if ( $_ =~ /\s(\d+\s$substring)/ )
{
$reqpsec == $1;
}
print $reqpsec;
}
 
pour l'instant je n'en suis qu'au premier paramètre.
 
Merci de votre aide.


Message édité par steph0805 le 30-10-2012 à 11:07:06

---------------
bulat nv4 - NFP107 (12,75) - RCP105 (12) - NSY104 (16,5) - SMB137 (12) - GLG105 (10) - RSX101 (17) - RSX102 (11,5) - NSY205 (18) - NSY206 (14) - NSY107 (13,38) - NFP108 (15) - EME102 (10.4) - TET102 (12) - ENG110 (10) -  
mood
Publicité
Posté le 30-10-2012 à 11:05:51  profilanswer
 

n°2162286
Lucdeux
Posté le 02-11-2012 à 11:29:41  profilanswer
 

Citation :

#!C:\Perl\bin -w


j'connais pas bien perl sous windows, mais j'crois que c'est pas bon cette ligne... enfin, ca n'empechera pas le script de fonctionner...
 

Citation :

my $resultat = '$commande > resultat.txt';


j'espere que ce sont des apostrophes inversees, sinon, ca n'executera pas la commande.
 

Citation :

close "resultat.txt";


ce n'est pas comme ca qu'on ferme un fichier. de plus, tu n'as pas a fermer les fichiers que tu n'as pas toi-meme ouvert. l'execution de la $commande s'est deja occupe de la fermeture de ce fichier.
 

Citation :

open FICHIER,"<$file";


Citation :

while ($_ = <FILE> ){


tu ouvres un fichier avec l'identifiant FICHIER et tu lis avec l'identifiant FILE ?
 

Citation :

if ( $_ =~ /\s(\d+\s$substring)/ )


par rapport a ton exemple (.0435 requests/sec), ca ne fonctionnera pas. dans ton exemple, il n'y a pas de blanc \s avant les chiffres. il y a un point.
 

Citation :

$reqpsec == $1;


pour faire une affectation, il ne faut qu'un seul signe =

n°2162361
gilou
Modérateur
Modzilla
Posté le 02-11-2012 à 19:18:26  profilanswer
 

J'aurais été directement été lire le statut sur le serveur Apache (il semble clair que vous pouvez vous octroyer les droits pour lire le statut directement), en ce qui me concerne.

Code :
  1. #!/usr/local/bin/perl
  2. use strict;
  3. use warnings;
  4. use LWP::Simple;
  5.  
  6. my $status_page = 'http://www.apache.org/server-status'; # mettre celle de votre serveur
  7. my $content = get($status_page);
  8. die "Page de statut inaccessible!" unless defined $content;
  9.  
  10. my ($v1, $v2, $v3, $v4);  # mettre des noms de variable significatifs
  11. foreach (split /^/, $content) {
  12.  if (/(\d+)\s+requests\/sec\s+-\s+(\d+\.\d+)\s+(M|k)?B\/second/) {
  13.   ($v1, $v2) = ($1, $2); # equivaut a $v1 = $1; $v2 = $2;
  14.  }
  15.  if (/(\d+)\s+requests\s+currently\s+being\s+processed,\s+(\d+)\s+idle\s+workers/) {
  16.   ($v3, $v4) = ($1, $2);
  17.  }
  18.  # adapter pour le reste de vos recherches
  19. }
  20.  
  21. #on peut maintenant utiliser les données trouvées:
  22. print "La variable v2 vaut: ", $v2, "\n";
  23.  
  24. #etc


 
A+,


Message édité par gilou le 02-11-2012 à 19:39:11

---------------
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

  [PERL] Récupérer des données dans un fichier txt

 

Sujets relatifs
Défilement données ListBoxLien vers un fichier autre
Spliter un fichier TEXTE (couper en 2)pbl d'ajout données hexa dans le registre à partir d'un VBS
Lien absolu-relatif pour un fichier local ? [RESOLU] awk: lecture d'un fichier par un autre fichier
Récupérer e-mails sur fichier CSV [RESOLU]Function insérer données texte dans mysql
PowerShell Supprimer Fichier suite à une recherche de chaine de caract 
Plus de sujets relatifs à : [PERL] Récupérer des données dans un fichier txt


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