Bonjour,

Dans un script bash, je parse des fichiers csv séparateur ";". Hors j'ai un champ spécifique chaine, qui peut contenir mon séparateur avec un nombre variable d'occurences.

Exemple:
aaa;bbb;"C11; C22;C23(cc)";ddd;eee
fff;ggg;"hhhh1;hhhh3;hhhh4;";iii;jjj
la position de la chaine dans le fichier est fixe (champ 3 dans l'exemple).
Mon but, remplacer les séparateurs dans cette chaine, pour permettre un traitement particulier ensuite.

Résultat attendu:

aaa;bbb;"C11, C22,C23(cc)";ddd;eee
fff;ggg;"hhhh1,hhhh3,hhhh4,";iii;jjj
Remarque:

J'ai trouvé le moyen de le faire avec awk, mais mon traitement serait simplifié si je trouvais le moyen de le faire avec un sed -i

Commande awk:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
cat $file | awk -F\" 'BEGIN {OFS="\""}{gsub(";",",",$2);print}'
Dans mon script, ça m'obligerait à passer par un fichier intermédiaire pour chaque csv

La plupart de mes occurrences ont un espace après le séparateur, mais pas tous ...
Donc la seule commande:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sed -i 's/; /, /g' *.csv
ne couvre pas tous les cas.

Peut-on faire cela avec Sed, j'ai bien du mal à créer une règle délimitant la chaine (entre 2 ") et substituant toutes les occurrences de ; entre "" ..

Merci de votre aide