#1 Le 17/03/2006, à 09:47
- alci
[Résolu] Fichiers mdb (access) et script bash
Bonjour,
je doit manipuler sous Ubuntu des fichiers .mdb de façon automatique.
J'ai installé le paquet mdb-tools qui m'offre deux commandes en particulier :
- mdb-tables <fichier.mdb> : affiche la liste des tables
- mdb-export <fichier.mdb> <table> > exporttable.csv
Je voudrais combiner les deux dans un script bash, mais là je sèche complêtement :
un truc comme :
for fic in *.mdb
do
mdb-tables $fic > tables.txt
sous boucle sur le contenu de tables.txt
mdb-export $fic $table > fic.table.csv
done
Quelqu'un peut m'aider ?
Merci d'avance
Franck
Dernière modification par alci (Le 17/03/2006, à 15:58)
Hors ligne
#2 Le 17/03/2006, à 13:45
- LaTheix
Re : [Résolu] Fichiers mdb (access) et script bash
Tu l'as quasiment déjà écrit ton script
Essayes un truc du genre:
for base in `ls *.mdb`
do
mdb-tables $base > tables.txt
for tbl in `cat tables.txt`
do
mdb-export $base $tbl > ${base}_${tbl}.csv
done
rm -fr tables.txt
done
Bon, j'ai pas testé le truc .... sans garantie de résultat donc!
Hors ligne
#3 Le 17/03/2006, à 15:57
- alci
Re : [Résolu] Fichiers mdb (access) et script bash
Merci !
En fait, j'ai aussi eu quelques problèmes avec les espaces dans les noms de tables...
Alors voici ma solution, un petit script bash :
#!/bin/sh
IFS=!
for table in `mdb-tables -d ! $1`
do
echo "Export de la table $1"
dbname=`echo "$1" | awk -F/ '{print $NF}'`
mdb-export -d \| "$1" "$table" > "$2/$dbname.$table.csv"
done
J'explique un peu :
- IFS=! pour fixer le séparateur de champs dans la boucle for (les noms de tables peuvent contenir des espaces, jamais des !)
- mdb-tables -d ! lui dit justement d'utiliser le ! comme séparateur des noms de tables
- mdb-export -d | lui dit d'utiliser le | comme séparateur dans le fichier csv. Là ça dépend un peu des données, mais le caractère ',' par défaut ne convient de toute façon pas car la virgule sert aussi de séparateur décimal
- deux paramètres à passer à la ligne de commande : $1 le nom du fichier mdb à traiter, $2 le répertoire dans lequel je veux sauvegarder mes exports.
On pourrait facilement rajouter sur le même principe un petit mdb-schema pour exporter les schémas de création des tables exportées.
Et pour le lancer sur tout un répertoire :
for fic in rep/*.mdb; do ./export-databse.sh $fic repcsv ; done
Pour la bonne bouche, comme je n'ai pas réussi à lui imposer le caractère décimal et que la commande COPY de postgresql veut un point, je lance :
sed -i s/,/./g repcsv/*.csv
(inconvénient : si vous avec des virgules dans des champs de chaînes de caractères, elles sont aussi remplacées)
Merci
Franck
Hors ligne