Awk - substitua um caractere apenas em uma determinada coluna

13

Eu 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

Quero substituir todos os pontos .na segunda coluna por uma vírgula, ,como faria com sed 's/\./\,/g' filecomo posso usar sedou, de preferência, awkaplicar apenas isso à segunda coluna, para que minha saída fique assim:

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
nath
fonte

Respostas:

22
$ 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{} esse bloco de código será executado antes de processar qualquer linha de entrada
  • FS=OFS=";" defina o separador de campos de entrada e saída como ;
  • gsub(/\./, ",", $2)para cada linha de entrada, substitua todo o .segundo campo por,
  • 1é um idioma awk para imprimir o conteúdo $0(que contém o registro de entrada)
Sundeep
fonte
1
incrível, muito THX!
Nath
9
sed 's/\./,/3' file

substituir a terceira ocorrência do ponto

Emilio Galarraga
fonte
2
Outro uso de Useles de cat... Por que não apenas sed 's/\./,/3' file? (Além disso, a vírgula não precisa ser escapado.)
twalberg
I levou em conta as observações
Emilio Galarraga
catnão seria necessariamente inútil aqui. Isso permitiria que a operação usasse 2 núcleos.
Ron rothman
@ronrothman, qual seria o objetivo da execução principal cat, além de consumir recursos? Talvez para fornecer um pouco de buffer, mas essa intenção deve ser melhor expressa por uma ferramenta como a bufferque cat.
Roland Illig 15/12/19
Para desacoplar as leituras do disco (bloqueando) da substituição da string. Sim, suponho que você possa pensar nisso como buffer.
Ron rothman
4

Feito pelo método abaixo usando awk

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

resultado

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