Как разобрать выражения времени в оболочке?
Я хочу иметь скрипт оболочки с параметром, указывающим некоторое время. Существует ли уже существующий способ преобразования временных выражений ala: 1d, 34m, 3s, или 0,456h, или 23ms, скажем, в миллисекунды или часы? Прежде чем я начну кодировать его самостоятельно? Я в основном использую Ubuntu, но другие решения для конкретных ОС также были бы интересны.
Это не проблема, что могут быть задействованы другие инструменты, такие как perl, python или awk.
1 ответ
Вот небольшой грязный пример 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