1

Я хочу сгенерировать текстовую метку времени в оболочке Unix с точностью до микросекунды, не используя опцию даты %N (я использую занятый ящик, меньший набор инструментов Unix, у которого нет этой опции), чтобы добавить префикс к выводу, который я генерирую. Временная метка должна иметь формат "<seconds since epoc>.<microseconds>" .

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

Таким образом, желаемый результат будет выглядеть так:

[1305638345.123456] awk script output

Я могу получить epoc достаточно просто, используя date +"%s" , поэтому мой вопрос, есть ли способ получить микросекунды из оболочки?

2 ответа2

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;
}

Компилировать с помощью cc -o timestamp timestamp.c

Для полноты: clock_gettime() может возвращать наносекунды, но с помощью скрипта awk вы в любом случае не достигнете этой точности.

0

Принимает ли date busybox поле% N (наносекунд)?

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

Чтобы убрать «нано-несс»

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

или же

time=$(date "+%s.%N"); time=${time%???}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .