Jai un fichier comme celui-ci:
2018.01.02;1.5;comment 1 2018.01.04;2.75;comment 2 2018.01.07;5.25;comment 4 2018.01.09;1.25;comment 7
Je souhaite remplacer tous les points .
dans la deuxième colonne par une virgule ,
comme je le ferais par sed "s/\./\,/g" file
comment puis-je utiliser sed
ou de préférence awk
pour ne lappliquer quà la deuxième colonne, donc ma sortie ressemble à ceci:
2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7
Réponse
$ awk "BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1" ip.txt 2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7
-
BEGIN{}
ce bloc de code sera exécuté avant de traiter une ligne dentrée -
FS=OFS=";"
définir le séparateur de champ dentrée et de sortie comme;
-
gsub(/\./, ",", $2)
pour chaque ligne dentrée, remplacer tous les.
dans le 2ème champ avec,
-
1
est un idiome awk à imprimer cont ents de$0
(qui contient lenregistrement dentrée)
Réponse
sed "s/\./,/3" file
remplace la troisième occurrence du point
Réponse
Fait par ci-dessous la méthode utilisant awk
Commande: awk -F ";" "{gsub(/\./,",",$2);print $1";"$2";"$3}" filename
sortie
2018.01.02;1,5;comment 1 2018.01.04;2,75;comment 2 2018.01.07;5,25;comment 4 2018.01.09;1,25;comment 7