2

Эта команда даты GNU позволяет мне получить миллисекунды следующим образом:

date +%M:%S.%N;

но эта команда не работает на солярисе ... есть идеи?

5 ответов5

4

Этот "сценарий оболочки" должен отображать миллисекунды:

#!/bin/ksh
if [ ! -x /var/tmp/time_ms ]
then
    cat > /tmp/time_ms.c << %
    #include <sys/time.h>
    main()
    {
        struct timeval tv;
        gettimeofday(&tv,(void*)0);
        printf("%d.%d\n",tv.tv_sec,tv.tv_usec/1000);
    }
%
    PATH=$PATH:/usr/sfw gcc /tmp/time_ms.c -o /var/tmp/time_ms
fi
/var/tmp/time_ms

Конечно, вы можете переместить time_ms в вашей переменной PATH и вызывать ее сразу после первого запуска. Это обеспечит более быстрое решение, чем gnu date или любой perl/ любой другой скрипт.

2

Наиболее вероятным объяснением является то, что Solaris не использует дату GNU или не имеет последней версии. В справочной странице Solaris для даты не упоминается опция форматирования %N Документы GNU coreutils для спецификаторов преобразования времени для date специально говорят, что %N является расширением GNU (о, это наносекунды, а не миллисекунды).

Если вам нужны миллисекунды, лучше всего загрузить последние версии GNU coreutils и установить их в /usr/local (или /opt/local если вы предпочитаете). Чтобы получить правильную версию date , вы должны либо сконфигурировать свой PATH так, чтобы /usr/local/bin предшествовал /usr/bin либо использовать полный путь к /usr/local/bin/date в вашем скрипте.

1
#!/usr/bin/bash

TSP_MSEC=`perl -MTime::HiRes -e 'print int(1000 * Time::HiRes::gettimeofday),"\n"'`
MSEC=`echo $TSP_MSEC | cut -c11-13`

TSP=`date +%d.%m.20%y" "%H:%M:%S.$MSEC`
echo $TSP

Результат: 15.07.2014 16: 10: 01.260

0

Perl есть почти везде. Использование:

perl -e 'print time()*1000;print "\n";'

Если вам действительно нужна точность в миллисекундах, попробуйте модуль Time:HiRes.

[EDIT] В качестве альтернативы, скомпилируйте небольшую программу на C, которая вызывает gettimeofday() и печатает результат.

0

Если вы измеряете время, затрачиваемое частью скрипта, вы можете поместить эту часть скрипта в функцию и вызвать time myfunction . Вы также можете вызвать times встроенное до и после раздела, который вы хотите рассчитать, но выполнять арифметику самостоятельно - это немного больно.

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