Gerando um timestamp para usec precisão no shell (Busybox)

1

Eu quero gerar um timestamp textual no shell unix com precisão de microssegundo, sem usar a opção %N date (estou usando o busybox, um conjunto de ferramentas unix menor que não tem essa opção), para prefixar a saída gerando. O timestamp deve ter o formato "<seconds since epoc>.<microseconds>" .

awk -f ./myawkscript.awk < /param | sed 's/$/\[<TIMESTAMP WOULD GO HERE>].'

Assim, a saída desejada seria semelhante a:

[1305638345.123456] awk script output

Eu posso obter o epoc bastante fácil usando date +"%s" , então minha pergunta é, existe uma maneira de obter os microssegundos do shell?

    
por MM01 18.05.2011 / 15:30

2 respostas

2

#include <stdio.h>
#include <sys/time.h>

int main() {
    struct timeval t;

    if (gettimeofday(&t, NULL) == 0)
        printf("%d.%06u\n", t.tv_sec, t.tv_usec);

    return 0;
}

Compile com cc -o timestamp timestamp.c

Para a conclusão: clock_gettime() pode retornar nanossegundos, mas com um script awk você não atingiria essa precisão de qualquer maneira.

    
por 18.05.2011 / 16:03
0

O busybox date aceita o campo% N (nanossegundos)?

time=$(date "+%s.%N")

Para remover a "nano-ness"

time=$(date "+%s.%N" | cut -c 1-17)

ou

time=$(date "+%s.%N"); time=${time%???}
    
por 18.05.2011 / 17:27