Milissegundo tempo em um script de shell

4

Como alguém pode imprimir o tempo todo, por exemplo, 12: 07: 59: 393 (HH: MM: SS: milissegundos) em milissegundos. Eu encontrei um monte de posts dizendo como imprimir milissegundos junto com HHMMSS, mas eu quero imprimir o relógio em tempo real em milissegundos. Estou usando o Linux.

    
por RajuBhai 02.05.2016 / 16:55

2 respostas

6

Isso lhe dará quantos milissegundos se passaram desde o início da época do Unix:

date +%s%3N

Você precisa reduzir os segundos * 1000 que passaram até as 00:00 h de hoje. Ou você pode simplesmente converter tudo em milissegundos desta fórmula:

date +%H%M%S%3N

Como:

h=$(date +%H)
m=$(date +%M)
s=$(date +%S)
ms=$(date +%3N)
echo $((10#$h*3600000 + 10#$m*60000 + 10#$s*1000 + 10#$ms))

Executar isso me levou em média 4 milissegundos, você pode querer reduzir esse tempo.

Edit: Se houver um zero inicial em uma das variáveis, o script falhará. Eu adicionei 10 # na frente dos nomes das variáveis, para remover os zeros à esquerda, de modo que ficássemos, por exemplo, 8 em vez de 08.

    
por 02.05.2016 / 17:09
3

Veja se o perl é portátil o suficiente:

perl -MTime::HiRes=time -MPOSIX=strftime -e '
    $now = int(time() * 1000);
    printf "%s.%03d\n", strftime("%H:%M:%S", localtime(int($now/1000))), ($now % 1000);
'

Tempo :: HiRes e POSIX são ambos módulos principais do Perl.

Se você quiser apenas o registro de data e hora da época com segundos fracionários:

$ perl -MTime::HiRes=time -le 'print time()'
1462218218.49011
    
por 02.05.2016 / 21:41