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. salut,

    regarde dans les Astuces du site, il y a un article sur la façon de lire un fichier en shell bash.
    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. 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 !