Awk – substitua um caractere apenas em uma determinada coluna

Tenho um arquivo 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 

Desejo substituir todos os pontos . na segunda coluna por uma vírgula , como faria com sed "s/\./\,/g" file como posso usar sed ou preferencialmente awk para aplicar isso apenas para a segunda coluna, para que minha saída tem esta aparência:

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 

Resposta

$ 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 bloco de código será executado antes de processar qualquer linha de entrada
  • FS=OFS=";" defina o separador de campo de entrada e saída como ;
  • gsub(/\./, ",", $2) para cada linha de entrada, substitua todos os . no 2º campo com ,
  • 1 é um idioma awk para imprimir cont ents de $0 (que contém o registro de entrada)

Resposta

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

substitua a terceira ocorrência do ponto

Resposta

Feito por método abaixo usando awk

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

saída

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 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *