Scripts sh création LDIF

Résolu
Bonjour,

j'aimerai créer un scripts ayant pour paramètre un fichier CSV me permettant de créer un fichier LDIF (pour import dans un annuaire LDAP).

Mon fichier CSV (user.csv) ressemble à ça :

Identifiant;nom;prénom;email;rh
TEST01;TEST1;TEST1;TEST1@TEST.fr;9702
TEST02;TEST1;TEST1;TEST1@TEST.fr;9703

et mon fichier LDIF ressemblerait à ça :

dn: uid=TEST01, ou=People
objectClass:blabla
cn: TEST1 TEST1
sn: TEST1
rh: 9702
name: TEST1

dn: uid=TEST02, ou=People
objectClass:blabla
cn: TEST1 TEST1
sn: TEST1
rh: 9703
name: TEST1

Mon script sh serait lancer de cette façon : ./script user.csv et devrait me ressortir un fichier user.ldif

Quelqu'un pourrait-il m'apporter un peu d'aide svp ?

Merci d'avance.

4 réponses

  1. Contributeur
    hello
    $ awk -F";" '{printf "dn: uid=%s, ou=People\nobjectClass:blabla\ncn: %s %s\nsn: %s\nrh: %s\nname: %s\n\n",$1, $2, $2, $2, $5, $2}' user.csv  > user.ldif
    $ 
    $ cat user.ldif
    dn: uid=TEST01, ou=People
    objectClass:blabla
    cn: TEST1 TEST1
    sn: TEST1
    rh: 9702
    name: TEST1
    
    dn: uid=TEST02, ou=People
    objectClass:blabla
    cn: TEST1 TEST1
    sn: TEST1
    rh: 9703
    name: TEST1
    
    $ 
    1. salut,

      regarde dans les Astuces du site, il y a un article sur la façon de lire un fichier en shell bash.
      1. Bonjour et merci pour vos réponses qui m'ont grandement aidé.

        Par contre, j'ai un léger problème :

        Dés que mon script est sur plus d'un ligne j'ai un message d'erreur :

        awk: string too long near line 1
        awk: syntax error near line 1
        awk: illegal statement near line 1

        Comment faire pour exécuter mon traitement sur plus d'une seule ligne ?

        Mon script :

        awk -F";" '{printf "dn: uid=%s, ou=People, dc=gardiansesame\nobjectClass: gardianSesamePerson\nobjectClass: inetOrgPerson
        \nobjectClass: organizationalPerson\nobjectClass: person\nobjectClass: top\ncn: %s %s\nsn: %s\nrh: %s\nname: %s\n\n",$1,
        $2, $2, $2, $5, $2}' user.csv > user.ldif

        D'avance merci ;-)
        1. Contributeur
          quel système ?
          le code est bien sur une seule ligne ?
          sinon mettre un \ en fin de ligne
          ou mettre le code awk dans un fichier
          $ cat f1.awk
          {printf "dn: uid=%s, ou=People, dc=gardiansesame\nobjectClass: gardianSesamePerson\nobjectClass: inetOrgPerson \nobjectClass: organizationalPerson\nobjectClass: person\nobjectClass: top\ncn: %s %s\nsn: %s\nrh: %s\nname: %s\n\n",$1, $2, $2, $2, $5, $2}
          
          $ 
          $ awk -F";" -f f1.awk  user.csv > user.ldif
          1. Contributeur
            edit
            sinon mettre un \ en fin de ligne parce qu'on est dans un long string entre les "
          2. Merci pour ton aide précieuse, mais le problème perdure.

            Le système est SunOS.

            Après avoir essayé avec un \ en fin de ligne et en mettant le code awk dans un fichier toujours les mêmes erreurs :

            awk: string too long near line 1
            awk: syntax error near line 1
            awk: illegal statement near line 1
            awk: newline in string near line 1
          3. Contributeur
            sur SunOS, utiliser nawk plutot que awk
          4. Cooooool ça fonctionne. Je te remercie grandement :-)

            J'ai fait les essais sous un système Linux ça fonctionne avec awk. J'ai fais les essais avec nawk sous SunOS ca fonctionne aussi. MERVEILLEUX !