Awk – ne remplace quun caractère dans une certaine colonne

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 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *