Script sh pour création de fichier .ldif(csv)
madavekia
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
madavekia Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
madavekia Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Csv to ldif
- Qwerty to azerty - Guide
- Video to video - Télécharger - Conversion & Codecs
- Majuscule to minuscule - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Reboot to bootloader - Guide
17 réponses
Salut,
Remplace "nawk" par "awk", attention à ton séparateur (dans ton fichier ces ":" et non ";") :
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
zipe31
Messages postés
36402
Date d'inscription
Statut
Contributeur
Dernière intervention
6 430
Euh... tout le monde aura rectifié le "ces" en "c'est" ;-((
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) .........
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) .........
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
.
.
.
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
.
.
.
$ 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 ;-\
Salut,
Il me semblait bien que "awk" était insensible au format M$ ;-)
Je viens d'en refaire l'expérience :
;-\
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
;-\
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
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
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 :
Donc merci de répondre au mieux aux demandes faites, faute de quoi ton sujet n'avancera pas ;-(
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 ;-(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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$
$ cat -A plop | head -3
Identifiant;nom;prenom;adresse:mail$
id1:nom1:prenom1:adresse1:mail1$
id2:nom2:prenom2:adresse2:mail2$
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.....
$ 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.....
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???
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???
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 ?
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 ?
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
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
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: $
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
0
0
0
0
0
0
0
il se passe rien, quand je tape sur entrée j'ai un 0