Scripts sh création LDIF

Résolu
got2be717 Messages postés 7 Statut Membre -  
got2be717 Messages postés 7 Statut Membre -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  2. Utilisateur anonyme
     
    salut,

    regarde dans les Astuces du site, il y a un article sur la façon de lire un fichier en shell bash.
    0
  3. got2be717 Messages postés 7 Statut Membre
     
    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 ;-)
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      edit
      sinon mettre un \ en fin de ligne parce qu'on est dans un long string entre les "
      0
    2. got2be717 Messages postés 7 Statut Membre
       
      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
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      sur SunOS, utiliser nawk plutot que awk
      0
    4. got2be717 Messages postés 7 Statut Membre
       
      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 !
      0