IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Ciblage de tri


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut Ciblage de tri
    Bonjour,

    En attendant d'être complètement autonome (un jour je l'aurai), je galère sur un tri. En effet, je ne sais pas qu'elle est la meilleur façon et fonction à utiliser.
    J'ai quand même réussi à faire un début de script qui me donne la liste suivante en provenance de mon LDAP :
    dn: uid=toto,ou=People,dc=exemple,dc=org
    dn: uid=tata,ou=People,dc=exemple,dc=org
    shadowExpire: 14853
    dn: uid=coco,ou=People,dc=exemple,dc=org
    shadowExpire: 15431
    dn: uid=kiki,ou=People,dc=exemple,dc=org
    J'ai essayé avec la fonction grep ou la boucle foreach, j'ai réussi simplement à extraire les ligne shadowExpire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #
    !/usr/bin/perl
    use warnings;
    use strict;
     
    my @list = (`ldapsearch -h hostname.com -D cn=proxyuser,dc=exemple,dc=org -w XXXXXXX -b ou=People,dc=exemple,dc=org uid=* shadowExpire`);
     
    foreach my $entry (@list) {
                            chomp ($entry);
                            my @i=$entry;
                            if ($i[0] =~ /dn/) {
                            my $flag = $entry;
                            }
                            if ($i[0] =~ /shadowExpire/) {
                            print "$flag \n $i[0]\n";
                            $flag="";
                            }
    }
    Malheureusement, mon objectif est de sortir que les lignes avec uid qui sont suivies de la ligne shadowExpire. J'essaye de mettre la ligne antérieure dans la variable $flag mais celle ci ne peut pas être prise en compte dans la 2eme condition ....

    Global symbol "$flag" requires explicit package name at ./shadowexp_control.pl line 15.
    Global symbol "$flag" requires explicit package name at ./shadowexp_control.pl line 16.
    Comment puis je faire ?
    Merci de votre aide.


    Merci pour votre aide ...

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    J'ai trouvé tout seul comme un grand, j'ai déclaré ma variable $flag avant la boucle....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    my @list = (`ldapsearch -h hostname.com -D cn=proxyuser,dc=exemple,dc=org -w XXXXXXX -b ou=People,dc=exemple,dc=org uid=* shadowExpire`);
    my $flag;
    foreach my $entry (@list) {
                            chomp ($entry);
                            my @i=$entry;
                            if ($i[0] =~ /dn:/) {
                            $flag = $i[0]
                            }
                            if ($i[0] =~ /shadowExpire/) {  
                            print "$flag \n $i[0]\n";
                            $flag="";
                            }                
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Si je puis me permettre une remarque, pourquoi copies tu $entry dans un tableau ?
    C'est tout à fait inutile, tu peux directement utiliser $entry dans tes tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my $flag;
    foreach my $entry (@list) {
                            chomp ($entry);
                            if ($entry =~ /dn:/) {
                              $flag = $entry
                            }
                            if ($entry =~ /shadowExpire/) {  
                              print "$flag \n $entry\n";
                              $flag="";
                            }                
    }
    Ensuite, si tu souhaites conserver tout les uid suivis d'un shadowExpire, puis les trier selon cette valeur, une méthode est de mettre à jour un tableau contenant des "objets" uid (hash contenant deux clés : l'uid et l'expireshadow). Il suffit alors de trier sur l'une des données.
    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    my $uid;
    my @uid = ();
    foreach my $entry (@list) {
      chomp ($entry);
      if ($entry =~ /dn:/) {
        $uid = $entry
      }
      if ($entry =~ /shadowExpire/) {
        push @uid, { uid => $uid,
                           expire => $entry };
        $uid = "";
      }
    }
    foreach $uid (sort { $a->{expire} cmp $b->{expire} } @uid) {
      print "UID $uid->{uid}, Expire : $uid->{expire}\n";
    }
    Pour de l'aide sur la fonction sort : perldoc -f sort

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  3. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53
  4. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo