awk removendo sem intenção vírgulas

5

Estou manipulando dados de um arquivo de texto com a seguinte estrutura de dados:

"1111","2222","3333","4444","5555","6666","7777","2017/12/15 16:26:00"

Estou tentando alterar o '/' na data para '-'. Aqui está o meu comando awk:

awk -F "," '{gsub("/", "-", $8); print}' my-input.txt

Altera com êxito o /, mas tem a consequência não intencional de substituir as vírgulas ',' por um '' caractere de espaço:

"1111" "2222" "3333" "4444" "5555" "6666" "7777" "2017-12-15 16:26:00"

Alguém sabe por que isso está acontecendo?

    
por GustavMahler 01.03.2018 / 10:05

2 respostas

13

Como apontado por taliezin e pfnuesel, ao definir o separador do arquivo de entrada como ',' é necessário também definir o separador do arquivo de saída como ',' para mantê-lo. Se o separador do arquivo de saída for omitido e uma modificação em um campo existente tiver sido feita, o awk usará o valor padrão, neste caso, um caractere '[espaço].

O abaixo é o comando awk corrigido:

awk -F "," -v OFS="," '{gsub("/", "-", $8); print}' my-input.txt

Qual o resultado pretendido que mantém o ',':

"1111","2222","3333","4444","5555","6666","7777","2017-12-15 16:26:00"
    
por 01.03.2018 / 10:25
1

Como o requisito é "alterar o '/' na data para '-'", que é uma simples substituição de caracteres, por que não usar o sed? sed 's /// - / g' my-input.txt

    
por 01.03.2018 / 18:56