Forum Programmation.shell SED : Remplacer sous conditions...

Posté par  . Licence CC By‑SA.
Étiquettes :
0
14
avr.
2021

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  (site Web personnel) . Évalué à 6 (+4/-0). Dernière modification le 14/04/21 à 18:11.

    En capturant les chiffres, tu peux les réutiliser dans la substitution :

    sed -i -e "s/\([0-9]\)[[:space:]]\([0-9]\)/\1\2/g" -e "s/,/./g" "$file"
    

    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)

    It's a fez. I wear a fez now. Fezes are cool !

  • # Commentaire supprimé

    Posté par  . Évalué à 1 (+0/-0). Dernière modification le 15/04/21 à 08:24.

    Ce commentaire a été supprimé par l’équipe de modération.

Envoyer un commentaire

Suivre le flux des commentaires

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