web-dev-qa-db-fra.com

Awk - remplace un seul caractère dans une certaine colonne

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
12
nath
$ 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ée
  • FS=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)
20
Sundeep
sed 's/\./,/3' file

remplacer la troisième occurrence du point

8
Emilio Galarraga

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
4
Praveen Kumar BS