nanosegundo em log conversão de microssegundos

1

Estou carregando um dado no ElasticSearch e depois visualizando-o no Kibana. No entanto, o Kibana não suporta precisão de nanossegundos. Como o meu arquivo contém 900.000 linhas, como faço para percorrer o seguinte:

Eu quero pré-processar o arquivo no bash.

INPUT file1.csv:

2018-10-1711:54:59.4422378,OUTLOOK.EXE,12052,11316,Thread Profiling,Thread 11316,SUCCESS,User Time: 0.0000000; Kernel Time: 0.0000000; Context Switches: 3,company\username,0

EXPECTED OUTPUT file2.csv:

2018-10-1711:54:59.442,OUTLOOK.EXE,12052,11316,Thread Profiling,Thread 11316,SUCCESS,User Time: 0.0000000; Kernel Time: 0.0000000; Context Switches: 3,company\username,0

Como arredondar a data para 3 dígitos? Eu quero arredondar a base no quarto dígito. 4425000 = 442, 4426000 = 443

    
por creed 08.11.2018 / 15:28

1 resposta

1
awk -F, 'BEGIN { OFS=FS=","; } 
  {
    seconds=substr($1, index($1, ".")-2, 10); 
    ms=substr(seconds, 7); 
    seconds=substr(seconds, 1, 6); 
    if (ms > 5000) 
      seconds += 0.001; 
    $1=sprintf("%s%6.3f", substr($1, 1, index($1, ".") - 2), seconds);
    print
  }' < input

Isso simplesmente força os campos timestamp do primeiro parâmetro e verifica se o tempo deve ser arredondado ou não. Com o novo valor de tempo em mãos, ele reagrupa o campo de registro de data e hora de volta em $1 e imprime a nova linha.

    
por 08.11.2018 / 16:11