将秒转换为分钟

将秒转换为分钟

我目前有一个函数可以从 cmus 打印位置和持续时间并将其格式化为“1/500”。我遇到的问题是,我希望位置和持续时间数据以分钟而不是秒的形式呈现(0:01/8:20 而不是 1/500),但我不知道如何实现这。

目前该函数的相关部分如下所示:

print_music(){
    if ps -C cmus > /dev/null; then
        position=`cmus-remote -Q |
            grep --text '^position' |
            sed -e 's/position //' |
            awk '{gsub("position ", "");print}'`
        duration=`cmus-remote -Q |
            grep --text '^duration' |
            sed -e 's/duration //' |
            awk '{gsub("duration ", "");print}'`
        echo "[$position/$duration]"; else echo "";
    fi
}

答案1

这将帮助您:

sec2min() { printf "%d:%02d" "$((10#$1 / 60))" "$((10#$1 % 60))"; }
$ sec2min 500
8:20
$ sec2min 1
0:01

答案2

我试图完成完全相同的事情。使用 @RubberStamp 对 @glenn jackman 的答案的评论中的 awk 方法,我最终得到了以下显示的内容: 例如

2:07 / 4:08

cmus-remote -Q | egrep "^duration|position" \
| tr '\n' ' ' \
| sed "s#^duration \|position ##g" \
| awk '{print ($2 / 60)-(($2 % 60)*1/60) ":" ($2 % 60), "/", ($1 / 60)-(($1 % 60)*1/60) ":" ($1 % 60)}' \
| sed "s#:\([0-9]\)\( \|\$\)#:0\1\2#g#";

注意:最后一个 sed 表达式添加了前导0s,以便2:7 / 4:8正确显示2:07 / 4:08

相关内容