Генерация метки времени для использования точности в оболочке (Busybox)

2878
MM01

Я хочу сгенерировать текстовую метку времени в оболочке 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"мой вопрос, так есть ли способ получить микросекунды из оболочки?

1

2 ответа на вопрос

2
grawity
#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
glenn jackman

Занят ли busybox dateполе% N (наносекунд)?

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

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

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

или же

time=$(date "+%s.%N"); time=$ 
Процитируем вопрос: «без использования опции% N date (я использую busybox, меньший набор инструментов unix, у которого нет этой опции)» grawity 12 лет назад 2

Похожие вопросы