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

Shell et commandes GNU Discussion :

Attributs en sortie de ldapsearch dans un certain ordre


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 38
    Par défaut Attributs en sortie de ldapsearch dans un certain ordre
    Bonjour,

    Toujours avec le ldapsearch, je cherche à ce que les attributs que je récupère en sortie soient dans un certain ordre.
    Voici mon filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ldapsearch -H ldaps://ldap.titi.fr -x -b ou=xxxx,dc=tutu,dc=fr -D "cn=machin,ou=tuc,dc=titi,dc=fr"   "(&(objectclass=person)(ugrrStatus=OFFI)(|(eduPersonAffiliation=employee)(eduPersonAffiliation=essai)(eduPersonAffiliation=suite)))"  toto supannCivilite sn givenName | sed '/::/s/\(.*:: \)\(.*\)/echo \1 $(echo \2 |base64 --decode)/e'  >  monfichier.txt
    Dans monfichier.txt , la plupart du temps les attributs apparaissent dans l'ordre toto, supannCivilite, sn et givenname ...sauf pour certains enregistrements qui se retrouvent dans un ordre différent comme par exemple : sn,givenName,toto, supannCivilité.

    d'où ma question: est-il possible de demander dans le ldapsearch à ce que les attributs de sortie soient dans un certain ordre ?

    Cordialement,

    FredNV

  2. #2
    Membre émérite
    Homme Profil pro
    Architecte cybersécurité
    Inscrit en
    Avril 2014
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte cybersécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 566
    Par défaut
    Hello,

    Techniquement parlant, ton script doit être résilient à ce genre de truc.

    Mais bon check l'overlay valsort, je ne l'ai jamais implémenté mais je suppose que c'est ce que tu veux.

    https://linux.die.net/man/5/slapo-valsort

    EDIT: nope l'overlay valsort ne va finalement pas t'être d'une grande aide, pas plus que l'option -S de ldapsearch je pense.

    -> Go scripting, sauf si quelqu'un me prouve le contraire à base d'options ldap ^^

    Pour quelle raison veux-tu cet ordre? uniquement esthétique?

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 38
    Par défaut
    Bonjour,

    Non , non ce n'est pas purement esthétique.
    En sortie mon fichier se présente de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sn: griri
    givenName: Loic
    supannCivilite: M.
    DateBirth: 20040727
     
    supannCivilite: MME
    DateBirth: 19621019
    sn: tutu
    givenName: Noëlle
    Or s'il avait été trié ( cad tjrs sn puis givenName puis datebirth) , je pourrai faire un "beau" fichier qui pourrait se transformer en fichier csv ayant les mêmes choses dans chaque colonne.

    Et là , je ne vois pas comment faire ça simplement.

    Merci d'avance pour vos suggestions,

    fredNV

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 38
    Par défaut
    Bonjour,

    Ne réussissant pas à obtenir un tri des attributs recupérés en sortie du ldapsearch, je me suis rabattue sur la création de 3 fichiers : 1 pour chaque attribut de sortie avec pour chacun un login et l'attribut en sorti du ldapsearch.
    Ce qui donne par exemple pour le fichier contenant SN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # login people, titi.fr
    dn: uid=login1,ou=people,dc=titi,dc=fr
    sn: sn1
    Après plusieurs modifications de fichier, j'obtiens 1 ligne par enregistrement dans chacun de mes fichiers, par exemple pour sn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     login1,sn1
                login2,sn2
    J'ai donc un fichier pour sn, un pour givenName, etc...

    J'ai également trié sur la 1er colonne mes fichiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort -k 1 monfichiersn4.txt > monfichiersn5.txt
    Maintenant mon pb est comment fusionner mes fichiers avec comme critère la valeur de la première colonne identique ( càd le login)???
    j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    join -11 -21 monfichiersn.txt  monfichiergn.txt
    mais ça ne fonctionne pas.

    Est-ce que quelqu'un pourrait me dire comment faire, svp ?

    fredNV

  5. #5
    Membre émérite
    Homme Profil pro
    Architecte cybersécurité
    Inscrit en
    Avril 2014
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte cybersécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 566
    Par défaut
    Hello,

    Un fichier par attribut c'est vraiment pas propre...On est sur du bricolage façon système D.

    Essayes de passer par awk ca devrait être largement jouable, et 200 fois plus propre.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 358
    Par défaut
    Un peu comme ça (version gawk de gnu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat tutu.txt
    sn: griri
    givenName: Loic
    supannCivilite: M.
    DateBirth: 20040727
     
    supannCivilite: MME
    DateBirth: 19621019
    sn: tutu
    givenName: Noëlle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk -F\: 'BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"};NF <= 1{for (k in A){ printf(A[k]";")};print "";next}{X=$1;$1="";A[X]=$0}END{for (k in A) {printf(A[k]";")};print ""}' tutu.txt
      20040727;  Loic;  griri;  M.;
      19621019;  Noëlle;  tutu;  MME;

  7. #7
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 38
    Par défaut
    Bonjour,

    Oui en effet, faire plusieurs fichiers était de la bricole mais vu que je ne maîtrise pas vraiment , ça peut aider de contourner le pb
    La commande awk....fonctionne super bien : merci beaucoup !!
    Par contre, est-ce que quelqu'un pourrait me détailler un peu ce que ça fait exactement (dans ce qu'à poster disedorgue )? histoire de bien comprendre ..
    Merci à tous,

    fredNV

  8. #8
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 358
    Par défaut
    awk -F\: <== séparateur de champs le ':'
    BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"} <== on demande à awk de trier un tableau de hash selon son hash
    NF <= 1{for (k in A){ printf(A[k]";")};print "";next} <== si nombre de champs de la ligne en cours inférieur ou égale à 1, on affiche les valeurs du tableau et on dit à awk de passer à l'itération (ligne) suivante
    {X=$1;$1="";A[X]=$0} <== ici on rempli un une donnée du tableau selon A[$1]=$2...$n
    END{for (k in A) {printf(A[k]";")};print ""} <== ici on affchie la dernière itération de remplissage du tableau car dans ce cas on n'aura plus de ligne qui vérifie le NF <= 1

  9. #9
    Membre averti
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Janvier 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Janvier 2017
    Messages : 38
    Par défaut
    Merci beaucoup pour toutes vos explications et la résolution de mon pb.
    J'ai découvert la commande awk et appris plein de choses( pas sure que je sache tout refaire ..mais je vais essayer d'y travailler).
    Bonne journée,

    fredNV

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    awk -F\: <== séparateur de champs le ':'
    BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"} <== on demande à awk de trier un tableau de hash selon son hash
    NF <= 1{for (k in A){ printf(A[k]";")};print "";next} <== si nombre de champs de la ligne en cours inférieur ou égale à 1, on affiche les valeurs du tableau et on dit à awk de passer à l'itération (ligne) suivante
    {X=$1;$1="";A[X]=$0} <== ici on rempli un une donnée du tableau selon A[$1]=$2...$n
    END{for (k in A) {printf(A[k]";")};print ""} <== ici on affchie la dernière itération de remplissage du tableau car dans ce cas on n'aura plus de ligne qui vérifie le NF <= 1
    Bonne initiative (que je note dans mes tablettes) !

    [CHIPOTAGE]

    Les "spécifications" supposent que les "blocs" de données sont séparés par une ligne vide.

    Supposons que le fichier contienne des lignes vides excédentaires, au début du fichier, entre 2 blocs, ou à la fin du fichier, comme ceci:
    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
    % cat tutu.txt ; echo "<== tutu.txt vient de finir à la ligne vide précédente"
     
    sn: griri
    givenName: Loic
    supannCivilite: M.
    DateBirth: 20040727
     
     
    supannCivilite: MME
    DateBirth: 19621019
    sn: tutu
    givenName: Noëlle
     
     
     
    <== tutu.txt vient de finir à la ligne vide précédente
    Le code proposé ne prétend pas (à juste titre) gérer ces cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    awk -F\: 'BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"};NF <= 1{for (k in A){ printf(A[k]";")};print "";next}{X=$1;$1="";A[X]=$0}END{for (k in A) {printf(A[k]";")};print ""}' tutu.txt
     
      griri;  M.;  20040727;  Loic;
      griri;  M.;  20040727;  Loic;
      tutu;  MME;  19621019;  Noëlle;
      tutu;  MME;  19621019;  Noëlle;
      tutu;  MME;  19621019;  Noëlle;
    Si on introduit un flag "qch" qui indique si on a trouvé quelque chose à imprimer, c'est-à-dire un nouveau bloc, on peut gérer ces cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    % awk -F\: 'BEGIN{PROCINFO["sorted_in"]="@ind_str_asc";qch=0};NF <= 1{if (qch) {for (k in A){ printf(A[k]";")};print "";qch=0};next}{qch=1;X=$1;$1="";A[X]=$0}END{if (qch) {for (k in A) {printf(A[k]";")};print ""}}' tutu.txt
      griri;  M.;  20040727;  Loic;
      tutu;  MME;  19621019;  Noëlle;
    En revanche, mon code ne prétend pas prendre en compte le cas où il manquerait un champ dans un bloc, auquel cas on hériterait pour ce champ de la valeur du bloc précédent... Pour bien faire, il faudrait vider tout le tableau dès qu'on tombe sur une ligne séparatrice... (laissé en exercice au lecteur)

    [/CHIPOTAGE]
    Après, on va dire que je chipote...

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

Discussions similaires

  1. [OL-2010] Plusieurs comptes, envoyer-recevoir dans un certain ordre
    Par luca.donati dans le forum Outlook
    Réponses: 1
    Dernier message: 07/04/2013, 02h21
  2. Réponses: 4
    Dernier message: 29/01/2007, 14h43
  3. Faire un Select qui retourne dans un certain ordre
    Par Rodie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2007, 22h29
  4. Trier un fichier dans un certain ordre
    Par Taz_8626 dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2006, 09h40
  5. selection dans un certain ordre
    Par kenny49 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/06/2006, 10h57

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