秒を分に変換

秒を分に変換

現在、cmusに位置と期間を印刷して「1/500」形式で指定する機能があります。私が経験している問題は、場所と期間のデータを秒ではなく分単位(1/500ではなく0:01/8:20)で表示したいが、これを達成する方法がわからないことです。

現在の関数の関連部分は次のとおりです。

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

私は同じことを達成しようとしています。 @glenn jackmanの答えに対する@RubberStampのコメントで、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:82:07 / 4:08

関連情報