2017-10-06 27 views
0

を取得するためにUNIXで2回を減算する私はautosysジョブの完了時間を計算したい:どのよう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 

そしてIそれを計算するために、以下のスクリプトを書いた:


$ 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 

私のクエリは今:あなたは私を提案することができ、出力が正しくありません。 私のような正しい答えを期待しています:最初のジョブに 2時11分を>>

+0

day1で23:04:59、day2で00:34:31で終了するジョブを取得したことはありますか?あなたのスクリプトは非常に非効率です。あなたは一つの 'awk'スクリプトでデータを処理することができます。 –

+0

いいえJonathan、これらのジョブは午前6時から始まり、午後6時(IST)より前に完了し、これらのジョブは再使用ファイルジョブ(前日のファイル)を使用しているため、2日間の組み合わせで長時間実行する可能性はありません。 –

+0

@Jonathan、私は長い変電所 'expr $ H2 - $ H1'、' expr $ M2 - $ M1'、 'expr $ S2 - $ S'のように、時間の単位をunixでどのように引くことができるのか不思議ですon .. –

答えて

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-05おそらくmm/dd/yyyyです。

gawk(GNU Awk - あなたはちょうどawkを使用することができます)を使用してこのスクリプトはジョブを行います。 2つのユーザー定義関数と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でしまいます同じように。

関連する問題