Forum Programmation.shell Fichiers mdb (access) et script bash

Posté par  (Mastodon) .
Étiquettes : aucune
0
17
mar.
2006
Bonjour,

je cherche à automatiser le traitement de fichiers .mdb sous linux.
Je dispose des commandes de mdb-tools, à savoir :

- mdb-tables -1 fic.mdb : liste les tables d'une base .mdb, une table par ligne grâce à l'option -1
- mdb-export fic.mdb table : export dans un csv (à envoyer dans un fichier)

Je voudrais créer un script qui automatise l'export de toutes les tables de toutes les bases d'un répertoire, et je me heurte à mon manque de connaissances, de awk en particulier.

Donc je voudrais un truc du genre :

for fic in *.mdb
do
mdb-tables -1 $fic | awk '{mdb-export $fic $1 > $fic.$1.csv}'
done

Bon, ça ne marche pas, ma commande awk est bidon...
Quelqu'un peut m'aider, je suis sûr qu'un script peut faire ça !?

Merci
Franck
  • # comme ca ?

    Posté par  . Évalué à 3.

    for fic in *.mdb
    do
    for j in $( mdb-tables -1 $fic | awk '{print $1}'
    do
    mdb-export $fic $j > $fic.$1.csv
    done
    done
    • [^] # Re: comme ca ?

      Posté par  (Mastodon) . Évalué à 1.

      Super, merci beaucoup !

      (juste une petite typo : mdb-export $fic $j > $fic.$j.csv)

      Je continue de lire et d'apprendre sur awk et le shell, c'est vraiment trop puissant (extase du néophyte extasié :-)
      • [^] # Re: comme ca ?

        Posté par  (Mastodon) . Évalué à 1.

        Euh non, pas tout à fait finalement...

        Ces $@*# ont mis des espaces dans leurs noms de tables !! (ben oui, c'est possible...)

        Du coup le 'for j ' me découpe mes noms de tables...

        Y a-t-il un moyen dans le for de lui donner un delimiteur autre que l'espace ?
        • [^] # Re: comme ca ?

          Posté par  . Évalué à 3.

          Oui, mais il faut que les autres champs soient séparés par un autre caractère que l'espace sinon ça ne marche pas. Avant le for tu initialise la variable IFS avec ton séparateur de champ. Si tu as une table par ligne ça donne un truc du genre:
          IFS="
          "
          for ......


          • [^] # Re: comme ca ?

            Posté par  (Mastodon) . Évalué à 1.

            Merci !

            J'ai donc positionné IFS à ! (le ! est interdit dans le nom d'une table access), et j'ai passé à mdb-tables le paramètre -d ! (pour le séparateur), et là tout marche bien !

            Merci encore...

            Je me suis permis par ailleurs de proposer une astuce qui récapitule l'utilisation de mdb-tools avec bash pour traiter les fichiers .mdb.

            Elle est en cours de modération...

            Franck

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.