Я хочу иметь скрипт оболочки с параметром, указывающим некоторое время. Существует ли уже существующий способ преобразования временных выражений ala: 1d, 34m, 3s, или 0,456h, или 23ms в, скажем, миллисекунды или часы? Прежде чем я начну кодировать его самостоятельно? В первую очередь я использую Ubuntu, но другие решения для конкретных ОС также были бы интересны.

Это не проблема, что другие инструменты, такие как Perl, Python или AWK могут быть вовлечены.

1 ответ1

2

Вот небольшой грязный пример Perl при преобразовании в миллисекунды строки следующего формата: "Ad Bh Cm Ds", где A, B, C и D - значения для дня, часа, минуты и секунды соответственно. Порядок не имеет значения, но повторение не предусматривается (например, будет обработано только первое появление 'd', другие будут игнорироваться).

#!/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");

Примеры использования:

./foo.pl "2m 2s"
Total miliseconds = 122000
./foo.pl "0.5h 0.5s"
Total miliseconds = 1800500

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