我目前有一个函数可以从 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 表达式添加了前导0
s,以便2:7 / 4:8
正确显示2:07 / 4:08
。