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:
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:
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
Partager