Bash에서 두 시간의 차이를 계산하는 방법이 있는지 궁금합니다. 로그 파일에서 추출된 두 개의 필드가 있습니다.
시작시간 : 2월 12일 10:02:10 종료시간 : 2월 12일 10:53:15
나에게 필요한 것은 이 두 날짜 사이의 경과 시간을 수동으로 얻는 방법입니다. 시간 값은 날짜 생성 명령이 아닌 "텍스트 기반"이므로 이를 수행할 수 있는 방법이 있는지 모르겠습니다. 시간은 24시간 형식이므로 자정 이후의 시간을 처리하기가 더 쉬워지기를 바랍니다. 어떤 조언이라도 대단히 감사하겠습니다. 피터 V.
답변1
사용할 수 있는 몇 가지 사악한 트릭이 있습니다.
date -d "Feb 12 10:02:10" +%s
이 날짜의 에포크 이후 초 수를 반환합니다. 이를 동일한 명령(다른 날짜의 경우)과 결합하고 다음을 실행합니다 bc
.
echo "$(date -d 'Feb 12 10:53:15' +%s) - $(date -d 'Feb 12 10:02:10' +%s)" | bc
또는 쉘 산술 확장:
echo "$(( $(date -d 'Feb 12 10:53:15' +%s) - $(date -d 'Feb 12 10:02:10' +%s) ))"
당신에게 줄 것이다
3065
시간 사이의 초 수입니다. awk
여러 번 실행해야 하는 경우 어떻게든 구문 분석할 수 있습니다.
답변2
외부 도우미 유틸리티가 마음에 들지 않으면 내 유틸리티를 살펴보십시오.날짜 도구. 위 작업은 다음과 같이 해석됩니다.
ddiff -i '%b %d %H:%M:%S' 'Feb 12 10:02:10' 'Feb 12 10:53:15'
=>
3065s
-i
입력 날짜 형식을 설명하는 데 사용됩니다 .
답변3
다른 솔루션은 그렇지 않습니다.bc
1. 날짜를 Unix 시간(POSIX 시간 또는 UNIX Epoch 시간이라고도 함)으로 변환
$ date1=$(date -d "Feb 12 10:02:10" +%s)
$ date2=$(date -d "Feb 12 10:53:15" +%s)
$ printf '%s\n' "$date1" "$date2"
1518447730
1518450795
$
2. 두 날짜의 차이를 계산합니다.
$ datediff="$((date2-date1))"
3. 몇 초 안에 답을 얻을 수 있습니다.
$ echo "$datediff"
3065
$
4. 시, 분, 초 형식으로 변환
$ printf '%02dh:%02dm:%02ds\n' $(($datediff/3600)) $(($datediff%3600/60)) $(($datediff%60))
00h:51m:05s
또는
$ TZ=UTC date '+%H:%M:%S' -d"@$datediff"
00:51:05
결과가 ≥86400(예: 24시간)일 가능성에 주의하고 이에 따라 형식을 조정하세요.