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

madavekia Messages postés 34 Statut Membre -  
madavekia Messages postés 34 Statut Membre -
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.

17 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Euh... tout le monde aura rectifié le "ces" en "c'est" ;-((
      0
  2. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  3. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      $ 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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      hello
      l'éditeur ajoute peut-être des ^M
      que répond cat -A users.csv | head -3
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  4. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  7. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  8. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  9. madavekia Messages postés 34 Statut Membre
     
    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
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      ça ne ressemble pas à un cat -A car les lignes devraient se terminer par un $
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  10. madavekia Messages postés 34 Statut Membre
     
    OUI y'a un $ à la fin ....
    0
  11. madavekia Messages postés 34 Statut Membre
     
    de chaque lignes
    0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    qu'affiche
    awk -F':' '{print NF}'
    0
  13. madavekia Messages postés 34 Statut Membre
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Avec le fichier en plus à la fin de la syntaxe, ce serait peut être mieux ;-))
      0
  14. madavekia Messages postés 34 Statut Membre
     
    awk: ^ syntax error
    0
  15. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ooooops, merci, faire
    awk -F':' '{print NF}' users.csv
    0
  16. madavekia Messages postés 34 Statut Membre
     
    awk -F':' '{print NF}' users.csv
    5
    5
    5
    5
    1
    0
  17. madavekia Messages postés 34 Statut Membre
     
    C'est bon ça marche... le probléme venait d'une erreur syntaxique

    Grand MERCI à vous
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      le probléme venait d'une erreur syntaxique
      Laquelle histoire qu'on ne meure pas idiot ? ;-\ Merci ;-))
      0
  18. madavekia Messages postés 34 Statut Membre
     
    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