Parser un fichier txt (.csv base LDAP)

Bonjour,

J'ai un fichier .ldif (utilisateurs) d'une ancienne base ldap , je voudrais supprimer une partie des attribues de chaque entité de ce fichier et en même temps les écrire dans un fichier au format .csv , à partir de ce dernier (.csv) je génère un nouveau fichier .ldif avec la commande .awk .

Le fichier est très volumineux et le faire à la main est pratiquement inconcevable, donc la nécessité d'automatiser la procédure est nécessaire. j'ai cherché des applications (open source) pour le faire, ou des scripts sur le net afin de m'en inspirer mais je patauge.

Merci d'avance.

6 réponses

  1. Contributeur
    Salut,

    Peut être qu'avec un exemple concret AVANT => APRÈS nous serions plus à même de t'aider ;-\
    0
    1. mon fichier .ldif1: (AVANT)

      dn: uid=pperrot,ou=People,dc=xxxxxxx,dc=fr
      cn: pperrot
      sn: pperrot
      givenName: pperrot
      uid: pperrot
      uidNumber: 1003
      gidNumber: 513
      homeDirectory: /data/home/pperrot
      loginShell: /bin/bash
      gecos: System User
      structuralObjectClass: inetOrgPerson
      entryUUID: 9f25c6f4-cfd3-102c-872b-f54f04082e84
      creatorsName: cn=Manager,dc=xxxxxxx,dc=fr
      createTimestamp: 20080616093746Z
      sambaLogonTime: 0
      sambaLogoffTime: 2147483647
      sambaKickoffTime: 2147483647
      sambaPwdCanChange: 0
      sambaPwdMustChange: 2147483647
      displayName: System User
      sambaAcctFlags: [UX]
      sambaSID: S-1-5-21-1647326067-1975614102-959982912-3006
      sambaPrimaryGroupSID: S-1-5-21-1647326067-1975614102-959982912-513
      sambaLogonScript: pperrot.bat
      sambaProfilePath: '\\NETEZG8\profiles\pperrot
      sambaHomeDrive: H:
      sambaLMPassword: 9CB1B6105ACCADEF0A59CDA5244689BE
      sambaNTPassword: B100CA5D92E0D09F88BC37C810CE4532
      sambaPwdLastSet: 1213609092
      userPassword:: e1NTSEF9MHpXdGErbEhxUE91OFJFRlFEOUwwbHYzOHpOc05VOVg=
      objectClass: top
      objectClass: person
      objectClass: organizationalPerson
      objectClass: inetOrgPerson
      objectClass: posixAccount
      objectClass: shadowAccount
      objectClass: sambaSamAccount
      objectClass: radiusprofile
      radiusAuthType: EAP
      radiusTunnelPrivateGroupId: 20
      radiusTunnelMediumType: IEEE-802
      radiusTunnelType: VLAN
      entryCSN: 20080625132710Z#000000#00#000000
      modifiersName: cn=Manager,dc=xxxxxxx,dc=fr
      modifyTimestamp: 20080625132710Z

      dn: uid=mbrun,ou=People,dc=xxxxxxx,dc=fr
      cn: mbrun
      sn: mbrun
      givenName: mbrun
      uid: mbrun
      uidNumber: 1004
      gidNumber: 513
      homeDirectory: /data/home/mbrun
      loginShell: /bin/bash
      gecos: System User
      structuralObjectClass: inetOrgPerson
      entryUUID: ec2761d4-cffa-102c-872c-f54f04082e84
      creatorsName: cn=Manager,dc=xxxxxxx,dc=fr
      createTimestamp: 20080616141906Z
      sambaLogonTime: 0
      sambaLogoffTime: 2147483647
      sambaKickoffTime: 2147483647
      sambaPwdCanChange: 0
      sambaPwdMustChange: 2147483647
      displayName: System User
      sambaAcctFlags: [UX]
      sambaSID: S-1-5-21-1647326067-1975614102-959982912-3008
      sambaPrimaryGroupSID: S-1-5-21-1647326067-1975614102-959982912-513
      sambaLogonScript: mbrun.bat
      sambaProfilePath: '\\NETEZG8\profiles\mbrun
      sambaHomeDrive: H:
      sambaLMPassword: 50D937CF1083828EAAD3B435B51404EE
      sambaNTPassword: 3CB8FED01D4E00FF83095D014169698C
      sambaPwdLastSet: 1213625950
      userPassword:: e1NTSEF9MmxKbS9IcE0xM2c2ODdlK3MvSWpIUDBHRWo5eFVrUnk=
      objectClass: top
      objectClass: person
      objectClass: organizationalPerson
      objectClass: inetOrgPerson
      objectClass: posixAccount
      objectClass: shadowAccount
      objectClass: sambaSamAccount
      objectClass: radiusprofile
      radiusAuthType: EAP
      radiusTunnelMediumType: IEEE-802
      radiusTunnelType: VLAN
      radiusTunnelPrivateGroupId: 20
      entryCSN: 20110422082857Z#000000#00#000000
      modifiersName: cn=Manager,dc=xxxxxxx,dc=fr
      modifyTimestamp: 20110422082857Z
      ... (je n'ai pris que deux utilisateur en exemple)

      Le fichier .csv : (APRÈS)
      uid:cn:givenName:sn:sambaPwdLastSet:sambaLMPassword:sambaNTPassword:userPassword
      pperrot:pperrot:perrot:1213609092:9CB1B6105ACCADEF0A59CDA5244689BE:B100CA5D92E0D09$
      mbrun:mbrun:brun:1213625950:50D937CF1083828EAAD3B435B51404EE:3CB8FED01D4E00FF83095D0$

      Voila ...
      0
      1. Contributeur
        Le fichier .csv : (APRÈS)
        uid:cn:givenName:sn:sambaPwdLastSet:sambaLMPassword:sambaNTPassword:userPassword


        C'est les champs censés être récupérés ?

        Si oui, alors y'a un souci, parce que les 2 exemples qui suivent ne correspondent pas ?
        0
    2. Peu importe.... , le format est bon je cherche à récupérer certains attributs de chaque entité et les avoir au format .csv comme dans l'exemple qui ne vise qu'à te donner une idée de format
      0
      1. Contributeur
        En partant d'un fichier comme celui donné en exemple.

        Le script sed :
        $ cat script.sed 
        #n
        /^cn/{
        :z
        N
        /sambaPwdLastSet:/! bz
        s/[^:][^ ]* //Mg;s/\n./\n/2;s/\n/:/g;s/\([^:]*:\)\([^:]*:\)\([^:]*:\)\([^:]*:\)\([^:]*\):\(.*\)/\1\2\3\6:\4\5/p
        }


        Je récupère les champs avec "egrep" (y compris les lignes vides entre chaque id différentes, elles me servent de séparateur/délimiteur pour sed) :
        $ egrep 'uid:|cn:|givenName:|sambaPwdLastSet:|sambaLMPassword:|sambaNTPassword:|^$' plop | sed -f script.sed 
        pperrot:pperrot:perrot:1213609092:9CB1B6105ACCADEF0A59CDA5244689BE:B100CA5D92E0D09F88BC37C810CE4532
        mbrun:mbrun:brun:1213625950:50D937CF1083828EAAD3B435B51404EE:3CB8FED01D4E00FF83095D014169698C
        
        $

        A adapter...

        ;-))
        0
        1. Merci t'es un chef... Vais essayer tout ça et te tiens au courant, en attendant j'ai déjà fermé les fenêtres et lancer la procédure d'adoption d'un petit manchot
          0
          1. C'est bon ça marche !!! encore merci pour ton aide, une dernière chose si cela ne te dérange pas , serait il possible de commenter les lignes ci dessous ou de me les expliquer brièvement stp .....

            s/[^:][^ ]* //Mg;s/\n./\n/2;s/\n/:/g;s/\([^:]*:\)\([^:]*:\)\([^:]*:\)\([^:]*:\)\([^:]*\):\(.*\)/\1\2\3\6:\4\5/p
            0

            Discussions similaires

            question pix mot caché

            7 réponses