Programmation.perl : extraire un term d'une colone dans un tableau
Posté par dubis () le 09 août 2007
0
Bonjour,Je suis newbies en PERL. J'essaie de contruire un eptit script qui sortirait le pourcentage de l'utilisation des disques. Mon soucis c'est que mon script donne la ligne en entière et non pas la liste du champ désiré.
Voici mon script :
#!/usr/bin/perl -w
@disque=` df -h`;
foreach (@disque)
{print @disque[2]);
}
Merci de votre aide
> Lire le message (11 commentaires, moyenne: 1,3).
Vous avez demandé le commentaire #857379.


A tester et à adapter
#!/usr/bin/perl -w
foreach (`df -hP | tail -n +2`) {
my @i=split;
print "$i[0]\t($i[5])\t$i[4]\n";
}
[ Répondre ]
[^]Adaptation
Merci JJD
J'ai améliorer très succinctement ta correction. En effet j'ai enlevé le caractère % pour pouvoir faire une condition tel que :
#!/usr/bin/perl -w
foreach (`df -h`) {
s/%/ /;
my @i=split;
if ($i[4] > 25 )
print "$i[0]\t($i[5])\t$i[4]\n";
}
ça plante au niveau de la condition car je ne sais pas comment l'insérer même avec { }....
Un avis ???
[ Répondre ]
[^]Re: Adaptation
En fait comme ceci çà fonctionne =>
#!/usr/bin/perl
print "Partion pleine\n";
print "Partion\t\t Monté sur\t utilisé à\n";
foreach (`df -h | tail +2 2>/dev/null`) {
s/%//;
my @i=split;
if ($i[4] > 25 ) {
print "$i[0]\t($i[5])\t\t$i[4]%\n";
}
}
[ Répondre ]
[^]super Adaptation
J'essaie d'envoyer le resultat par mail avec le module MIME::Lite
trouvé ici :
http://www.alianwebserver.com/informatique/languages/perl/ma(...)
Donc le script devient :
#!/usr/bin/perl -w
use MIME::Lite;
sub envoi {
print "Partion pleine\n";
print "Partion\t\t Mont\303\251 sur\t utilis\303\251 \303\240\n";
foreach (`df -h | tail +2 2>/dev/null`) {
s/%//;
my @i=split;
if ($i[4] > 25 ) {
print "$i[0]\t($i[5])\t\t$i[4]%\n";
}
}
}
my $msg = new MIME::Lite
From =>'toto@hostname.org',
To =>'mdubois@polytech.unice.fr',
Subject =>'A simple text message',
Type =>'TEXT',
Data => print envoi();
$msg -> send;
Mon soucis c'est que le mail est vide .... Je suis un peut dépassé là mais merci de votre aide
[ Répondre ]
[^]Re: super Adaptation
J'ai trouvé un solution mais je passe par l'écriture d'un fichier :
#!/usr/bin/perl -w
use MIME::Lite;
@hostname=(`hostname`);
open( ATTACH, ">attach.txt") || die "$!";
print ATTACH "Attention Partion pleine sur le serveur @hostname\n";
print ATTACH "Partion\t\t Monté sur\t utilisé à\n";
foreach (`df -h | tail +2 2>/dev/null`) {
s/%//;
my @i=split;
if ($i[4] > 25 ) {
print ATTACH "$i[0]\t($i[5])\t\t$i[4]%\n";
}
}
close (ATTACH);
my $msg = new MIME::Lite
From =>'adm@hostname.org',
To =>'user@hostname.com',
Subject =>'Avertissement de partion pleine',
Type =>'multipart/mixed';
attach $msg
Type =>'TEXT',
Data =>"Resultat dans le fichier joint";
attach $msg
Type =>'TEXT',
Path =>'attach.txt',
Filename =>'attach.txt';
$msg-> send;
Merci de votre aide
[ Répondre ]
[^]Re: super Adaptation
Quelqu'un peut m'aider pour ne pas passer par l'ecriture de ce fichier ???
Merci de votre aide
[ Répondre ]
[^]print envoi() ?!
envoi() fait déjà les prints.
sinon un "pipe" sur la commande système "mail" peut fonctionner aussi
à la place du fichier temporaire, il suffit de lui envoyer le corp du mail.
[ Répondre ]
[^]Re: print envoi() ?!
oui car en fait avec envoi() tout seul, je reçois le mail avec le mot "envoi()" mais pas ce que contient la sub commande ....
Peux tu en dire plus à propos du pipe ?
Sinon j'efface le fichier avec la commande suivante que j'ai trouvé sur le web et qui fonctionne :
unless (fork) {
unlink </var/adm/attach.txt>;
exit;
}
Merci de votre aide
[ Répondre ]
[^]ouverture de pipe
open( MAIL, "|mail dest@dom.org") || die "$!";
http://perldoc.perl.org/functions/open.html
[ Répondre ]