Como substituir um delimitador entre dois outros delimitadores?

3

Eu tenho string como abaixo:

engineer,doctor,"987,345,123",engineer

Eu queria mudar para abaixo no unix:

engineer,doctor,"987345123",engineer
    
por venkat 28.07.2017 / 20:12

1 resposta

5

Usando awk quando a coluna de destino está em posição fixa, por exemplo, $2 aqui.

awk -F\" '{gsub(",","", $2)}1' OFS=\" infile.txt

acima, o separador F ield nós definimos " e com gsub(",","",$2) estamos substituindo todas as vírgulas por string vazia no campo # 2 $2 . o 1 no final é o controle de impressão do awk e finalmente com OFS=\" estamos dizendo ao awk para imprimir todos os campos com " de novo.

No caso geral:

awk -F\" '{for (i=2;i<=NF;i+=2)gsub(",","",$i)}1' OFS=\" infile.txt

Dados de entrada:

engineer,doctor,"987,345,123",engineer
engineer,doctor,"123", "987,345,123",engineer
engineer,doctor,"987,345,123","123,123",engineer
"123,456,789",engineer,doctor,"987345123","123123",engineer
engineer,doctor,"987345123","123123",engineer,"123,456,78,9"

A saída seria:

engineer,doctor,"987345123",engineer
engineer,doctor,"123", "987345123",engineer
engineer,doctor,"987345123","123123",engineer
"123456789",engineer,doctor,"987345123","123123",engineer
engineer,doctor,"987345123","123123",engineer,"123456789"
    
por 28.07.2017 / 20:17