Script sh pour création de fichier .ldif(csv)

Fermé
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015 - 3 août 2012 à 17:23
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015 - 6 août 2012 à 17:59
Bonjour,

J'aimerais ecrire un script 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) est le suivant :

Identifiant;nom;prenom;adresse:mail
id1:nom1:prenom1:adresse1:mail1
id2:nom2:prenom2:adresse2:mail2
.
.
.
idN:nomN:prenomN:adresseN:mailN
_____________________________________________________________________________________________

En sortie je voudrais avoir ceci:

dn: uid=id1, ou=People
objectClass:Top
cn: nom1
sn: prenom1
address: adresse1
mail: mail1

dn: uid=id1, ou=People
objectClass:Top
cn: nom2
sn: prenom2
address: adresse2
mail: mail2

.
.
.

dn: uid=idN, ou=People
objectClass:Top
cn: nomN
sn: prenomN
address: adresseN
mail: mailN

____________________________________________________________________________________________

J'ai creé un fichier test.awk :

{printf "dn: uid=%s, ou=People\nobjectClass: Top\ncn: %s\sn: %s\naddress: %s\nmail: %s\n\n",$1, $2, $3, $4, $5}

et j'ai taper la commande qui suit:

> nawk -F";" -f test.awk user.csv > user.ldif

Je n'ai aucun message d'erreur , la commande passe normalement, par contre y'a rien sur le fichier user.ldif à part nawk : commande not found (je suis sur Linux)

Quelqu'un pourrait il m'aider à resoudre le probléme s'il vous plait? Je vous remercie d'avance.
A voir également:

17 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
3 août 2012 à 18:14
Salut,

Remplace "nawk" par "awk", attention à ton séparateur (dans ton fichier ces ":" et non ";") :

 awk -F':' 'NR != 1 { printf "dn: uid=%s, ou=People\nobjectClass: Top\ncn: %s\nsn: %s\naddress: %s\nmail: %s\n\n",$1, $2, $3, $4, $5 }' user.csv > user.ldif 
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 11:49
Euh... tout le monde aura rectifié le "ces" en "c'est" ;-((
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 11:41
Tout d'abord merci pour ton aide,

J'ai bien remplacé le nawk par un awk et j'ai rectifié la faute de syntaxe (":");mais
Je n'ai toujours aucun resultat, le fichier user.ldif est toujours vierge, en plus quand je tape la commande rien ne se passe ,j'ai le prompteur qui clignote sans pour autant etre sur le répertoire ou je lance cette dérniere (la commande) .........
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 11:44
Perso sur ton exemple de fichier plus haut, chez moi ça marche ;-\

Il nous faudrait un exemple concret de ton fichier (à mettre sur cjoint si possible) ?

Il vient d'où ton fichier csv ? C'est un fichier Windows ?
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 14:39
Le fichier users.csv est un fichier texte que j'ai remplis à la main , je suis sur une machine linux(fedora 17).

users.csv est identitque à l'exemple siter en haut, c'est à dire :

Identifiant;nom;prenom;adresse:mail
id1:nom1:prenom1:adresse1:mail1
id2:nom2:prenom2:adresse2:mail2
.
.
.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 14:43
$ cat plop
Identifiant;nom;prenom;adresse:mail
id1:nom1:prenom1:adresse1:mail1
id2:nom2:prenom2:adresse2:mail2

$ awk -F':' 'NR != 1 { printf "dn: uid=%s, ou=People\nobjectClass: Top\ncn: %s\nsn: %s\naddress: %s\nmail: %s\n\n",$1, $2, $3, $4, $5}' plop 
dn: uid=id1, ou=People
objectClass: Top
cn: nom1
sn: prenom1
address: adresse1
mail: mail1

dn: uid=id2, ou=People
objectClass: Top
cn: nom2
sn: prenom2
address: adresse2
mail: mail2


$

Je ne peux rien de plus pour toi ;-\
0
dubcek Messages postés 18777 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 mars 2025 5 630
6 août 2012 à 15:15
hello
l'éditeur ajoute peut-être des ^M
que répond cat -A users.csv | head -3
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 15:18
Salut,

Il me semblait bien que "awk" était insensible au format M$ ;-)

Je viens d'en refaire l'expérience :

$ cat -A brol 
Identifiant;nom;prenom;adresse:mail^M$
id1:nom1:prenom1:adresse1:mail1^M$
id2:nom2:prenom2:adresse2:mail2^M$

$ awk -F':' 'NR != 1 { printf "dn: uid=%s, ou=People\nobjectClass: Top\ncn: %s\nsn: %s\naddress: %s\nmail: %s\n\n",$1, $2, $3, $4, $5}' brol 
dn: uid=id1, ou=People
objectClass: Top
cn: nom1
sn: prenom1
address: adresse1
mail: mail1

dn: uid=id2, ou=People
objectClass: Top
cn: nom2
sn: prenom2
address: adresse2
mail: mail2


;-\
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 15:30
La reponse au cat -A users.csv | head -3 est l'affichage des trois premier enregistrement c'est à dire :

Identifiant;nom;prenom;adresse:mail
id1:nom1:prenom1:adresse1:mail1
id2:nom2:prenom2:adresse2:mail2

et l'idée c'est d'importer les données du fichier users.csv afin de creer un users.ldif que je pourrais ajouter à mon .ldif de ma base ldap

Merci d'avance pour votre aide
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 15:35
La reponse au cat -A users.csv | head -3 est l'affichage des trois premier enregistrement c'est à dire :

Identifiant;nom;prenom;adresse:mail
id1:nom1:prenom1:adresse1:mail1
id2:nom2:prenom2:adresse2:mail2


Euh... non ! La réponse devrait être l'une ou l'autre des lignes qui suivent :

$ cat -A plop | head -3
Identifiant;nom;prenom;adresse:mail$
id1:nom1:prenom1:adresse1:mail1$
id2:nom2:prenom2:adresse2:mail2$

$ cat -A brol | head -3
Identifiant;nom;prenom;adresse:mail^M$
id1:nom1:prenom1:adresse1:mail1^M$
id2:nom2:prenom2:adresse2:mail2^M$

$

Donc merci de répondre au mieux aux demandes faites, faute de quoi ton sujet n'avancera pas ;-(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 15:37
Effectivement je me suis un peu précipité :

$ cat -A plop | head -3
Identifiant;nom;prenom;adresse:mail$
id1:nom1:prenom1:adresse1:mail1$
id2:nom2:prenom2:adresse2:mail2$
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 15:40
Ok*, et que donne la commande "awk" sur cet exemple ? Elle marche ou pas ?



* Bien que ce soit un copier/coller de mon exemple ;-((
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:00
J'ai biensur taper la commande

$ cat -A users.csv | head -3 et non avec ton exemple (plop), et pour ce qui est de la commande "awk" ca ne marche tjr pas et je ne comprends vraiment pas ce qui cloche.....
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 16:02
Difficile de t'aider davantage sans matière à tester ;-((

Il se peut qu'il y ait des caractères non-imprimables dans ton fichier ;-\
Ou que la syntaxe employée dans awk ne convienne/corresponde pas tout a fait pour matcher ton fichier...
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:10
Pour résumer, j'ai un fichier texte (users.csv) et un autre vierge (users.ldif) et la commanda awk que j'essaye de faire passer.....resultat des courses, c'est que le prompt bloque, si au moins j'avais un message d'erreur ça m'aurais peut etre aider....


Autre chose : c'est des guillemets (") et non un (') avant le print , sinon j'ai un message d'erreur qui me dit que la chaine est pas refermé, mais comme tu dis que ça a marché chez toi ....

$ awk -F':' "NR != 1 { printf "dn: uid=%s, ou=People\nobjectClass: Top\ncn: %s\nsn: %s\naddress: %s\nmail: %s\n\n",$1, $2, $3, $4, $5}" users.ldif

qu'es ce que ten pense???
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 16:16
Autre chose : c'est des guillemets (") et non un (') avant le print , sinon j'ai un message d'erreur qui me dit que la chaine est pas refermé, mais comme tu dis que ça a marché chez toi

Non, il faut des quotes simples autour de l'expression de "awk" impérativement !

Je viens d'essayer au cas ou en rajoutant un nom avec apostrophe dans le fichier csv et ça passe toujours (toujours avec des quotes simples autour).

Il y a quelque chose dans ton fichier qui interfère avec la syntaxe de awk, mais quoi ?
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:26
Dans mon fichier users.csv j'ai des password cryptés qui sont des chaines de caractétes alphanumerique (minuscules et majuscules confondus) , aprés ton post j'ai viré ce champ pour voir si c'etait lui qui posé probléme , mais RIEN !!!!

Voila le resultat du $ cat -A users.csv | head -3 de tout à l'heure ;

pbrunel:brunel:50D937CF1083828EAAD3B435B51404EE:3CB8FED01D4E00FF83095D014169698C:e1NTSEF9MmxKbS9IcE0xM2c2ODdlK3MvSWpIUDBHRWo5eFVrUnk=
qlamy:lamy:FE9352E46615FBB7C2265B23734E0DAC:4C706B2DA6E8624A6F3C7A7F143DE5F9:e1NTSEF9bEpMa0ZlNEg3QmxLdy9WMXBSUlBoZWt5TDZWeGJUTks=
pdiaz:diaz:AA9658E960287DDAAAD3B435B51404EE:C0F6AE8DE28EAE9EBFE3DE605DBE76C3
0
dubcek Messages postés 18777 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 mars 2025 5 630
6 août 2012 à 16:35
ça ne ressemble pas à un cat -A car les lignes devraient se terminer par un $
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 16:39
Avec cet extrait de ton fichier et en virant le "NR != 1" qui ne sert plus à rien vu qu'il n'y a pas de ligne de titre, ben chez moi ça marche toujours ;-\

$ awk -F':' '{ printf "dn: uid=%s, ou=People\nobjectClass: Top\ncn: %s\nsn: %s\naddress: %s\nmail: %s\n\n",$1, $2, $3, $4, $5}' fich 
dn: uid=pbrunel, ou=People
objectClass: Top
cn: brunel
sn: 50D937CF1083828EAAD3B435B51404EE
address: 3CB8FED01D4E00FF83095D014169698C
mail: e1NTSEF9MmxKbS9IcE0xM2c2ODdlK3MvSWpIUDBHRWo5eFVrUnk=

dn: uid=qlamy, ou=People
objectClass: Top
cn: lamy
sn: FE9352E46615FBB7C2265B23734E0DAC
address: 4C706B2DA6E8624A6F3C7A7F143DE5F9
mail: e1NTSEF9bEpMa0ZlNEg3QmxLdy9WMXBSUlBoZWt5TDZWeGJUTks=

dn: uid=pdiaz, ou=People
objectClass: Top
cn: diaz
sn: AA9658E960287DDAAAD3B435B51404EE
address: C0F6AE8DE28EAE9EBFE3DE605DBE76C3
mail: 


$
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:35
OUI y'a un $ à la fin ....
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:36
de chaque lignes
0
dubcek Messages postés 18777 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 mars 2025 5 630
6 août 2012 à 16:39
qu'affiche
awk -F':' '{print NF}'
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:42
linux-1dl0:/ # awk -F':' '{print NF}'

0

0

0

0

0

0

0

0

il se passe rien, quand je tape sur entrée j'ai un 0
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 16:45
Avec le fichier en plus à la fin de la syntaxe, ce serait peut être mieux ;-))
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 16:48
awk: ^ syntax error
0
dubcek Messages postés 18777 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 mars 2025 5 630
6 août 2012 à 17:06
ooooops, merci, faire
awk -F':' '{print NF}' users.csv
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 17:08
awk -F':' '{print NF}' users.csv
5
5
5
5
1
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 17:43
C'est bon ça marche... le probléme venait d'une erreur syntaxique


Grand MERCI à vous
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
6 août 2012 à 17:44
le probléme venait d'une erreur syntaxique
Laquelle histoire qu'on ne meure pas idiot ? ;-\ Merci ;-))
0
madavekia Messages postés 31 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 6 janvier 2015
6 août 2012 à 17:59
Tu mourras pas idiot l'ami, par contre moi j'ai vécu comme tel pendant trois jours :) ....

l'erreur c'etait le nombre de variables , j'en avais 8 et je n'en faisais passer que 7
0

Discussions similaires