2017-10-06 30 views
0

我想計算完成時間的autosys工作:如何在Unix中減去兩次獲得完成時間autosys工作

我有下面的工作狀態中的文件:

$cat rough 
abc_why_the_infra_dnjob    10/05/2017 10:41:36 10/05/2017 12:52:02 SU 
abc_why_the_avloqhk_dnjob    10/05/2017 09:53:36 10/05/2017 10:33:03 SU 
abc_why_the_avlogsg_dnjob    10/05/2017 10:33:14 10/05/2017 10:41:01 SU 
abc_why_the_avalokin_dnjob   10/05/2017 09:37:36 10/05/2017 09:53:06 SU 
abc_why_the_mastercard_dnjob   10/05/2017 13:29:36 10/05/2017 14:21:02 SU 
abc_why_the_tcs_dnjob     10/05/2017 03:13:36 10/05/2017 03:22:02 SU 
abc_why_the_cogni_dnjob    10/05/2017 09:20:36 10/05/2017 09:37:02 SU 
abc_why_the_dnjob     10/05/2017 03:41:36 10/05/2017 04:08:02 SU 

我寫了下面的腳本來計算的話:


$ cat sod.sh 

#!/bin/bash 

number=`cat rough| wc -l` 

for i in `seq 1 $number` 
do 

     job_name=`awk -F' ' '{print $1}' rough | sed -n "$i p"` 

     START_DATE=`awk -F' ' '{print $2}' rough | sed -n "$i p"` 
     END_DATE=`awk -F' ' '{print $4}' rough | sed -n "$i p"` 

     START_TIME=`awk -F' ' '{print $3}' rough | sed -n "$i p"` 
     END_TIME=`awk -F' ' '{print $5}' rough | sed -n "$i p"` 

     if [[ $START_DATE == $END_DATE ]] 
     then 
       T1=`date --date="${END_DATE} ${END_TIME}" "+%s"` 
       T2=`date --date="${START_DATE} ${START_TIME}" "+%s"` 

       TIME_DIFFERENCE=`expr $T2 - $T1` 
       COMPLITION_TIME=`date -d "@${TIME_DIFFERENCE}" "+%H:%M:%S"` 

       echo $COMPLITION_TIME 
     fi 
done 

輸出:

$./sod.sh 
03:19:34 
04:50:33 
05:22:13 
05:14:30 
04:38:34 
05:21:34 
05:13:34 
05:03:34 

我現在的查詢:輸出不正確,你可以建議我。 我期待正確的答案,如: 02:11 >>對於第一份工作

+0

你是否曾經在第一天的23:04:59開始工作,在第二天的00:34:31結束工作?你的腳本效率低下。你可以用一個'awk'腳本來處理數據。 –

+0

No Jonathan,這些作業從6AM IST時間開始,大部分在6PM IST之前完成,而這些作業使用重用文件作業(前一天文件),因此沒有機會長時間運行2天組合。 –

+0

@Jonathan,我只是想知道我們如何能夠在冗長的變電站'expr $ H2 - $ H1','expr $ M2 - $ M1','expr $ S2 - $ S'等旁邊的unix中減去時間實體上.. –

回答

0

我有使用Python腳本答案:

>>> s1='10:41:36' 
>>> s2='12:52:02' 
>>> import datetime 
>>> import time 
>>> total_time=(datetime.datetime.strptime(s2,'%H:%M:%S') - datetime.datetime.strptime(s1,'%H:%M:%S')) 
>>> print total_time 
2:10:26 
1

你有GNU awk的機器上?如果你不這麼做,這很難 - 但是如果你這樣做,更容易(雖然不容易),因爲它支持時間操縱 - 參見手冊中的time functions

該文件中的日期格式不起作用 - 甚至不清楚它是mm/dd/yyyy還是dd/mm/yyyy格式,但考慮到問題在2017年10月5日發出了詢問,這很可能是mm/dd/yyyy。

這個腳本使用gawk(GNU Awk--你也許可以使用awk)來完成這項工作。它使用兩個用戶定義的功能和mktime()。它不使用strftime(),因爲它在當地時間工作,這對我來說是不正確的,可能對你來說不正確(但是否則會使用strtime("%H:%M:%S", t2 - t1)以hh:mm:ss單位獲取時間值) 。

gawk ' 
function cvt_mdy_hms(d0, t0, d1, t1, dt, rv){ #d0="10/05/2017"; t0="10:41:36"; 
    split(d0, d1, "/"); split(t0, t1, ":"); 
    dt = d1[3] " " d1[1] " " d1[2] " " t1[1] " " t1[2] " " t1[3]; 
    rv = mktime(dt); 
    # print "[", dt, "] =", rv; 
    return rv 
} 
function hms(secs, hh, mm, ss, rv) { 
    hh = int(secs/3600); 
    mm = int(secs/60) % 60; 
    ss = secs % 60; 
    rv = sprintf("%.2d:%.2d:%.2d", hh, mm, ss); 
    # print "[", secs, " = ", rv, "]"; 
    return rv; 
} 
NF == 6 { t1 = cvt_mdy_hms($2, $3); t2 = cvt_mdy_hms($4, $5); 
    printf "%-30s %2s time %8s; [%10s %8s] = %10d [%10s %8s] = %10d; delta = %6d\n", 
     $1, $6, hms(t2 - t1), $2, $3, t1, $4, $5, t2, t2 - t1; 
}' data 

鑑於你的數據文件(在名爲data文件),輸出爲:

abc_why_the_infra_dnjob   SU time 02:10:26; [10/05/2017 10:41:36] = 1507225296 [10/05/2017 12:52:02] = 1507233122; delta = 7826 
abc_why_the_avloqhk_dnjob  SU time 00:39:27; [10/05/2017 09:53:36] = 1507222416 [10/05/2017 10:33:03] = 1507224783; delta = 2367 
abc_why_the_avlogsg_dnjob  SU time 00:07:47; [10/05/2017 10:33:14] = 1507224794 [10/05/2017 10:41:01] = 1507225261; delta = 467 
abc_why_the_avalokin_dnjob  SU time 00:15:30; [10/05/2017 09:37:36] = 1507221456 [10/05/2017 09:53:06] = 1507222386; delta = 930 
abc_why_the_mastercard_dnjob SU time 00:51:26; [10/05/2017 13:29:36] = 1507235376 [10/05/2017 14:21:02] = 1507238462; delta = 3086 
abc_why_the_tcs_dnjob   SU time 00:08:26; [10/05/2017 03:13:36] = 1507198416 [10/05/2017 03:22:02] = 1507198922; delta = 506 
abc_why_the_cogni_dnjob   SU time 00:16:26; [10/05/2017 09:20:36] = 1507220436 [10/05/2017 09:37:02] = 1507221422; delta = 986 
abc_why_the_dnjob    SU time 00:26:26; [10/05/2017 03:41:36] = 1507200096 [10/05/2017 04:08:02] = 1507201682; delta = 1586 

這也將是可能做到在Perl的工作沒有太多做文章,並在純Python以及。