我想有一种方法可以轻松地将持续时间(而不是 1970 年等的时间等)转换为以秒为单位的持续时间,例如 05:42:32。请问有没有一种简单快捷的方法可以在bash中做到这一点?我尝试使用“日期”和 %s 等,但它总是返回自 1970 年以来的时间,我只想要一个持续时间。
谢谢 !
awk
算作bash吗?
$ echo "05:42:32" | awk -F':' '{print $1 * 60 * 60 + $2 * 60 + $3}'
20552
如果您还需要解析没有小时的持续时间:
awk -F':' '{if (NF == 2) {print $1 * 60 + $2} else {print $1 * 60 * 60 + $2 * 60 + $3}}'
您可以使用 IFS 将时间拆分为小时、分钟和秒。
#! /bin/bash
to_seconds () {
IFS=: read h m s <<< "$1"
echo $(( 10#$h * 3600 + 10#$m * 60 + 10#$s ))
}
duration=05:42:32
to_seconds $duration
Pavel 的回答几乎是标准解决方案。
只是为了好玩,你也可以这样做(sed + bc)
:
kent$ echo "05:42:32"|sed 's/:/*60+/g;s/*60/&&/'|bc
20552