2013-08-09 2 views
0

05:42:32와 같은 지속 시간을 초 단위의 지속 시간으로 쉽게 변환하는 방법을 원합니다. bash에서이 작업을 수행하는 쉽고 빠른 방법이 있습니까? "date"및 % s 등을 시도했지만 1970 년 이후로 항상 시간을 반환하며 기간 만 필요합니다.DURATION HH : MM : SS를 bash에서 초로 변환하십시오.

감사합니다.

답변

4

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}}' 
+0

예는 않습니다! 솔루션을 제공해 주셔서 감사합니다. – user2375106

+0

또한 결과를 에코하는 대신 "duration"이라는 변수에서 어떻게 가져 오나요? 감사합니다. – user2375106

+0

어떤 명령의 결과도'variable = $ (command)'를 가진 변수에 할당 할 수 있습니다. 그래서'duration = $ (wherever_you_get_your_time_from | awk ...)' –

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 
+0

'곱하기 '란 무엇입니까? –

+0

@PavelAnossov : 오우, 감사합니다. 삭제되었습니다. 나는 원래 숫자를 1에서 60, 3600을 곱해서 실험했다. – choroba

+0

또한 $ 1 대신 $ duration을 사용했다. –

2

파벨의 대답은 거의 표준 해결책입니다.

그냥 재미를 위해, 당신도이 방법 (sed + bc)에 그것을 할 수 :

kent$ echo "05:42:32"|sed 's/:/*60+/g;s/*60/&&/'|bc 
20552 
관련 문제