Como analisar expressões de tempo no shell?

0

Eu quero ter um script de shell com um parâmetro especificando algum tempo. Já existe uma forma de transformar as expressões de tempo ala: 1d, 34m, 3s ou 0,456h, ou 23ms em digamos apenas milissegundos ou horas ?, antes de começar a codificá-lo por conta própria? Eu uso principalmente o Ubuntu, mas outras soluções específicas do sistema operacional também seriam interessantes.

Não há problema que outras ferramentas como perl, python ou awk possam estar envolvidas.

    
por math 24.08.2011 / 09:58

1 resposta

2

Bem, aqui está um exemplo rápido e sujo de Perl ao converter em milissegundos uma string com o seguinte formato: "Ad Bh Cm Ds" onde A, B, C e D são valores para dia, hora, minuto e segundo respectivamente. A ordem não importa, mas a repetição não é contemplada (por exemplo, somente a primeira aparição 'd' será processada, outras serão ignoradas).

#!/usr/bin/perl

use strict;

my @markers = ('d', 'h', 'm', 's');
my @converter = (24*60*60*1000, 60*60*1000, 60*1000, 1000);

my $string = $ARGV[0];
my $total_ms = 0;

while(@markers)
{
    my $cur_mark = shift(@markers);
    my $cur_convert = shift(@converter);
    if ($string =~ m/$cur_mark/)
    {
        my $pre = $';
        $pre =~ m/\b/;
        $total_ms += $' * $cur_convert;     
    }
}

print("Total miliseconds = $total_ms\n");

Exemplos de uso:

./foo.pl "2m 2s"
Total miliseconds = 122000
./foo.pl "0.5h 0.5s"
Total miliseconds = 1800500
    
por 24.08.2011 / 10:28