Forum Programmation.perl extraire un term d'une colone dans un tableau

Posté par  .
Étiquettes : aucune
0
9
août
2007
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
  • # A tester et à adapter

    Posté par  . Évalué à 1.

    #!/usr/bin/perl -w

    foreach (`df -hP | tail -n +2`) {
    my @i=split;
    print "$i[0]\t($i[5])\t$i[4]\n";
    }
    • [^] # Adaptation

      Posté par  . Évalué à 2.

      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 ???
      • [^] # Re: Adaptation

        Posté par  . Évalué à 2.

        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";
        }
        }
        • [^] # super Adaptation

          Posté par  . Évalué à 1.

          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
          • [^] # Re: super Adaptation

            Posté par  . Évalué à 1.

            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
            • [^] # Re: super Adaptation

              Posté par  . Évalué à 1.

              Quelqu'un peut m'aider pour ne pas passer par l'ecriture de ce fichier ???

              Merci de votre aide
              • [^] # print envoi() ?!

                Posté par  . Évalué à 1.

                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.
                • [^] # Re: print envoi() ?!

                  Posté par  . Évalué à 1.

                  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
  • # Sed est ton ami

    Posté par  . Évalué à 1.

    df -h | grep -s 's/2espaces*/1espace/g' | cut -d' ' -f5
  • # awk !

    Posté par  . Évalué à 2.

    df -h |gawk '{ print $1,$5 }'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.