Bonjour,
voilà, j'ai des gros fichiers à plat qui présente des données date, texte, alphanumérique, montants, …
Or, j'ai un SGB pour les exploiter et il bloque sur l'interprétation des fichiers pour une simple raison : Le format du champ numérique n'accepte pas les espaces et le séparateur de décimale est le point.
Du coup, je tâtonne avec sed pour passer de (mon fichier source):
TABLE;MODELE K568 IGNI;ELEC;1 256,34;20/05/2020;18/12/2020;HJ6KRL4;753261552
A ça (résultat grandement désiré) :
TABLE;MODELE K568 IGNI;ELEC;1256.34;20/05/2020;18/12/2020;HJ6KRL4;753261552
Ou j'ai modifié juste le montant en retirant l'espace (C'est là que je bloque) et en remplaçant la virgule par un point (ça, ça fonctionne).
Mon idée étant de lui faire remplacer tout espace se trouvant après ET avant un chiffre. Les autres espaces étant utiles.
Grand débutant, j'essaie de chercher et j'ai fais ça :
for file in *.txt
do
echo "Traitement de $file ..."
sed -i -e "s/[0-9][[:space:]][0-9]/[0-9][0-9]/;s/,/./g" "$file"
done
Ca me donne un résultat de type bloubi-boulga indigeste.
Et je récupère (résultat tristement obtenu) :
TABLE;MODELE K568 IGNI;ELEC;[0-9][0-9]56.34;20/05/2020;18/12/2020;HJ6KRL4;753261552
Surtout je ne sais pas comment lui dire de reprendre les mêmes chiffres et de supprimer juste l'espace. Lui, il me copie consciencieusement mon code…
Vous auriez une idée ?
Merci pour votre attention
# Tu ne captures pas les chiffres à remettre
Posté par Framasky (site web personnel) . Évalué à 6. Dernière modification le 14 avril 2021 à 18:11.
En capturant les chiffres, tu peux les réutiliser dans la substitution :
Dans ce que tu as fait, tu remplaçais les chiffres par
[0-9]
.(J'ai fait deux
-e
parce que je ne suis pas familier avec la syntaxe sed au-delà d'opérations unitaires)Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
[^] # Re: Tu ne captures pas les chiffres à remettre
Posté par Gaël4422 . Évalué à 1.
Merci beaucoup !!
Ça fonctionne parfaitement.
Merci à vous, bonne journée.
[^] # Re: Tu ne captures pas les chiffres à remettre
Posté par Cyril Brulebois (site web personnel) . Évalué à 1.
Pour combiner, il suffit d'utiliser
;
comme séparateur et hop !(J'ai conservé les espaces avant/après pour la lisibilité mais elles ne sont pas nécessaires.)
Debian Consultant @ DEBAMAX
# Commentaire supprimé
Posté par cafakieos . Évalué à 1. Dernière modification le 15 avril 2021 à 08:24.
Ce commentaire a été supprimé par l’équipe de modération.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.