Awk: reemplaza un carácter solo en una determinada columna

Tengo un archivo como este:

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 

Quiero reemplazar todos los puntos . en la segunda columna con una coma , como lo haría con sed "s/\./\,/g" file ¿cómo puedo usar sed o preferiblemente awk para aplicar esto solo para la segunda columna, por lo que mi resultado sería se ve así:

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 

Respuesta

$ 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{} este bloque de código se ejecutará antes de procesar cualquier línea de entrada
  • FS=OFS=";" establezca el separador de campo de entrada y salida como ;
  • gsub(/\./, ",", $2) para cada línea de entrada, reemplace todas las . en el segundo campo con ,
  • 1 es un modismo awk para imprimir cont entradas de $0 (que contiene el registro de entrada)

Respuesta

sed "s/\./,/3" file 

reemplaza la tercera aparición del punto

Respuesta

Hecho por siguiente método usando awk

Comando: awk -F ";" "{gsub(/\./,",",$2);print $1";"$2";"$3}" filename

salida

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 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *