J'ai 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 veux remplacer tous les points .
dans la deuxième colonne avec une virgule ,
comme je le ferais avec sed 's/\./\,/g' file
comment puis-je utiliser sed
ou de préférence awk
pour n'appliquer cela que pour la deuxième colonne, donc ma sortie ressemblerait à 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
$ 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 d'entréeFS=OFS=";"
Définissez le séparateur des champs d'entrée et de sortie sur ;
gsub(/\./, ",", $2)
pour chaque ligne de saisie, remplacez tous les .
dans le 2ème champ par ,
1
Est un idiome awk pour imprimer le contenu de $0
(Qui contient l'enregistrement d'entrée)sed 's/\./,/3' file
remplacer la troisième occurrence du point
Fait par la méthode ci-dessous en utilisant awk
Commande: awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename
production
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