Usando sed para acertar um número em um CSV

0

Eu tenho milhares de linhas que se parecem com isso:

e0f186cf-c34d-42e9-b8a9-9b9cf1f304e7,TotalNumberOfHandledConnectionsOrSessions,TotalNumbe1211008586,1457343000,179.00

A coluna anterior é um registro de data e hora. A questão é que é em segundos, onde eu preciso em milissegundos.

Então, eu gostaria de acertar esse número com 000.

MAS - é possível que um dia as linhas tenham os milissegundos nelas, então não deve adicionar 000 nesse caso.

Eu tentei usar alguns exemplos neste site com sed, mas nenhum funcionou.

    
por yi1 08.03.2016 / 19:32

2 respostas

0
sed 's/,\([0-9]\{10\}\),\([0-9]*\.[0-9]*\)$/,00,/'

Isso corresponde a um padrão de:

  1. vírgula,
  2. exatamente 10 dígitos,
  3. vírgula,
  4. algum número de dígitos,
  5. um período (escape),
  6. algum número de dígitos,
  7. o final da linha

e o substitui por:

  1. vírgula,
  2. o número de 10 dígitos (referenciado novamente por ),
  3. três zeros,
  4. vírgula,
  5. o último campo, referenciado novamente por .
por 08.03.2016 / 19:46
1

Com (GNU) awk

awk 'BEGIN { FS="," ; OFS="," } { if ( length($4)=10 ) { $4=$4"000" ; print $0 } else print $0 }' file

Explicação:

  • BEGIN { FS="," ; OFS="," } : no início, defina os separadores de campo de entrada ( FS ) e de saída ( OFS ) como vírgula
  • se a quarta coluna tiver um comprimento de 10 anúncios três zeros e imprimir todos
  • senão imprima tudo
por 08.03.2016 / 22:50

Tags