Scripts sh création LDIF [Résolu/Fermé]

Signaler
Messages postés
6
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
28 mai 2018
-
Messages postés
6
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
28 mai 2018
-
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

Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

salut,

regarde dans les Astuces du site, il y a un article sur la façon de lire un fichier en shell bash.
Messages postés
6
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
28 mai 2018

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 ;-)
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
edit
sinon mettre un \ en fin de ligne parce qu'on est dans un long string entre les "
Messages postés
6
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
28 mai 2018

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
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
sur SunOS, utiliser nawk plutot que awk
Messages postés
6
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
28 mai 2018

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 !