milissegundos da linha de comando do solaris

2

Este comando gnu date permite-me obter milissegundos desta forma:

date +%M:%S.%N;

mas este comando não funciona em solaris ... alguma idéia?

    
por andersonbd1 20.08.2010 / 16:10

5 respostas

4

Esse "script de shell" deve exibir milissegundos:

#!/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

Claro, você pode realocar o time_ms no seu PATH e chamá-lo diretamente após a primeira execução. Isso fornecerá uma solução mais rápida que gnu date ou qualquer script perl / whatever.

    
por 20.08.2010 / 22:31
2

A explicação mais provável é que o Solaris não usa a data GNU ou não possui a versão mais recente. A página man do Solaris para a data não menciona a %N opção de formatação. Os documentos GNU coreutils para especificadores de conversão de hora para date dizer especificamente que %N é uma extensão GNU (oh - é nanossegundos, não milissegundos).

Se você precisar de milissegundos, sua melhor aposta é fazer o download dos GNU coreutils mais recentes e instalá-lo em /usr/local (ou /opt/local se preferir). Para obter a versão correta de date , configure seu PATH para que /usr/local/bin venha antes de /usr/bin ou use um caminho completo para /usr/local/bin/date em seu script.

    
por 20.08.2010 / 16:20
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

Resultado: 15.07.2014 16: 10: 01.260

    
por 15.07.2014 / 16:12
0

Perl está em quase toda parte. Use:

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

Se você realmente precisar de precisão em milissegundos, tente o % móduloTime:HiRes .

[EDIT] Como alternativa, compile um pequeno programa em C que chama gettimeofday() e imprime o resultado.

    
por 20.08.2010 / 16:24
0

Se você estiver medindo o tempo gasto por uma parte do script, poderá colocar essa parte do script em uma função e chamar time myfunction . Você também pode chamar o times builtin antes e depois da seção que você quer, mas fazer a aritmética é um pouco doloroso.

    
por 20.08.2010 / 17:12

Tags