초를 분으로 변환

초를 분으로 변환

현재 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

관련 정보