Bonjour,
Voilà, j'ai un problème sur un script que j'ai écrit. Il doit traiter un fichier de 3Go, et selon mes calculs si je laisse ce que j'ai écrit cela mettra 69 jours à s'exécuter ....
Le fichier est un fichier plat. Chaque ligne contient des infos mises bout à bout.
ex :
info1info2l'info3 info4 info5......
Je dois insérer ces valeurs dans une requête sql pour obtenir :
insert into (xx,xx,xx,...) VALUES ('info1','info2','l\'info3','info4','info5'....)
Donc, je traite le fichier ligne par ligne.
- J'utilise le cut pour séparer les champs.
- Pour chaque champs je lui demande avec un sed de remplacer les ' par \' (Je ne peux pas le faire pour la ligne entière car je me base sur les positions des caractères pour retrouver les champs)
- Je supprime également grâce au sed, pour chaque champ, les espaces situés en fin de champ.
ce qui donne :
echo "INSERT INTO TABLE(xx,xx,xx,xx,xx....) VALUES ('`echo ${ligne} | cut -b 1-14| sed s/\'/\\\\\\\\\'/g | sed s/' '*$/''/g`','`echo ${ligne} | cut -b 15-54| sed s/\'/\\\\\\\\\'/g | sed s/' '*$/''/g`','`echo ${ligne} | cut -b 55-61| sed s/\'/\\\\\\\\\'/g | sed s/' '*$/''/g`','`echo ${ligne} | cut -b 62-67| sed s/\'/\\\\\\\\\'/g | sed s/' '*$/''/g`');" | sed s/\'\'/"null"/g # >> ${FICHIER_REQUETE}
(en réduit car il y a une centaine de champs au total !)
Y'aurait-il une solution moins couteuse en temps qui vous viendrait à l'idée ?
Merci,
Jérôme
Partager