【发布时间】:2017-10-06 02:54:38
【问题描述】:
我想计算一个 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 >> 第一份工作
【问题讨论】:
-
您是否有过从第 1 天 23:04:59 开始到第 2 天 00:34:31 结束的工作?你的脚本效率低得惊人。您可以使用单个
awk脚本处理数据。 -
没有乔纳森,这些作业从 IST 时间早上 6 点开始,大部分在 IST 下午 6 点之前完成,并且这些作业使用重用文件作业(前一天文件),因此没有机会长时间运行 2 天组合。
-
@Jonathan,我只是想知道我们如何在 unix 中在冗长的变电站
expr $H2 - $H1、expr $M2 - $M1、expr $S2 - $S等旁边减去时间实体。.. -
就像我向你展示的那样。将时间转换为与某个参考时间(午夜,或“时代”- 1970-01-01 00:00:00 +00:00)相比的偏移量(以秒为单位)。然后取这些偏移量之间的差异,并将其格式化为小时、分钟和秒。