如何解析shell中的时间表达式?

如何解析shell中的时间表达式?

我想要一个带有指定时间参数的 shell 脚本。在我开始编写自己的代码之前,是否已经有一种将时间表达式(例如: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

相关内容