2017-03-12 6 views
0

RMAN 시작과 RMAN 끝 간의 시간차를 계산해야합니다. 로그인 다음은, 내가 처음으로 4 열을 기준으로 열을 정렬하는 스크립트를 작성이bash에서 시간차를 계산하십시오.

-rw-r----- oracle/dba 2017-03-11 21:56:35 storage/backup/daily/ALG_PDB_2drut5jf.alg 
-rw-r----- oracle/dba 2017-03-11 21:56:34 storage/backup/daily/ALG_PDB_2erut5jf.alg 
-rw-r----- oracle/dba 2017-03-11 21:56:07 storage/backup/daily/ALG_PDB_2frut5jf.alg 
-rw-r----- oracle/dba 2017-03-11 21:56:29 storage/backup/daily/ALG_PDB_2grut5jv.alg 
-rw-r----- oracle/dba 2017-03-11 21:39:14 storage/backup/daily/BKPPDB_28rut42s.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:47:28 storage/backup/daily/BKPPDB_29rut42s.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:42:41 storage/backup/daily/BKPPDB_2arut42s.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:55:33 storage/backup/daily/BKPPDB_2brut4k8.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:55:36 storage/backup/daily/c-2819904582-20170311-00 
-rw-r----- oracle/dba 2017-03-11 21:56:42 storage/backup/daily/c-2819904582-20170311-01 
-rw-r----- oracle/dba 2017-03-11 21:56:41 storage/backup/daily/control_PDB_2hrut5kp.ctl 

처럼 스크립트에게 있습니다

#!/bin/bash -x 
if [ -f /storage/backup/weekly/DB-Backup-$(date -d "yesterday" '+%a-%d%m%y').tgz ] 
then 

export StartMin=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $2}'|awk 'NR==1; END{print}'|awk 'FNR==1 {print $1}') 
export EndMin=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $2}'|awk 'NR==1; END{print}'|awk 'FNR==2 {print $1}') 

export StartHour=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $1}'|awk 'NR==1; END{print}'|awk 'FNR==1 {print $1}') 
export EndHour=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $1}'|awk 'NR==1; END{print}'|awk 'FNR==2 {print $1}') 

echo "Backup for `date -d "yesterday" '+%a-%d%m%y'`" >> /storage/backup/weekly/MonthlyCompressionLog 
echo -e "RMAN Backup Started at $StartHour":"$StartMin" >> /storage/backup/weekly/MonthlyCompressionLog 
echo -e "RMAN Backup Ended at $EndHour":"$EndMin" >> /storage/backup/weekly/MonthlyCompressionLog 
echo -e "Time taken to Complete Backup Job Hours:Mins $((EndHour-StartHour))":"$((EndMin-StartMin))" >> /storage/backup/weekly/MonthlyCompressionLog 

echo -e "-------------------------------------------------------\n" >> /storage/backup/weekly/MonthlyCompressionLog 

스크립트가 작동 (성공)

하는 경우 종료 시간이 시작 시간보다 크다

스크립트가 실패 할 때

현재 시작 시간이 종료 시간보다 큰 경우이 경우 종료 시간은 StartHour보다 큽니다.

시나리오 :: RMAN이 14:56에 시작하여 15:02에 완료하면이 경우 총 시간 끝으로 시작은 0시 6분 최소하지만 스크립트 하나가 표시됩니다 : -54

어떤 아이디어 .... 대신 개별적으로 시간과 분을 계산

+0

위에 올린 글은'ls'의 결과입니까? – codeforester

+0

네, 그렇습니다 ..... – OmiPenguin

답변

1

은, 시작 및 종료에 대한 자정 이후 분의 수를 계산 , 그것을 사용하여 arithmentic을 수행하십시오.

그래서 같은 :

StartNumMins=$(($StartHour * 60 + $StartMin)) 
EndNumMinutes=$(($EndHour * 60 + $EndMin)) 

MinutesDiff=$(($EndNumMinutes - $StartNumMins)) 

DiffHours="0$(($MinutesDiff/60))" 
DiffMins="0$(($MinutesDiff % 60))" 

echo "Diff is $MinutesDiff minutes, which is ${DiffHours:-2}:${DiffMins:-2}" 

는 생산되는 :

물론
Diff is 6 minutes, which is 00:06 

프로세스가 자정을 통과하는 경우, 당신은, 고려 시작/종료일을하지 않도록해야합니다 그냥 시간. GNU의 '날짜'를 사용할 수있는 경우 (예 : Convert an ISO date to seconds since epoch in linux bash 참조)와 같은 몇 가지 옵션이 있지만 그 또 다른 문제입니다.

관련 문제