如何基于
计算经过时间开始时间=
[user001a@dev51 logs]# grep 'Recovery Manager'
refresh_03Jun2019_0250.log|head -1|awk -F'on ' '{print $NF}';
Jun 3 02:50:02 2019
[user001a@dev51 logs]#
结束时间=
[user001a@dev51 logs]# ls -l refresh_03Jun2019_0250.log
-rw-r--r--. 1 user001a grp001a 170050 Jun 3 05:06
refresh_03Jun2019_0250.log
[user001a@dev51 logs]#
注意-统计信息缺少出生时间,因此在计算文件创建和修改时间时统计信息可能不是一个好选择:
[user001a@dev51 logs]# stat refresh_03Jun2019_0250.log
File: `refresh_03Jun2019_0250.log'
Size: 170050 Blocks: 344 IO Block: 4096 regular file
Device: 811h/2065d Inode: 1474545 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 219/ user001a) Gid: ( 219/grp001a)
Access: 2019-06-03 05:06:40.830829026 -0400
Modify: 2019-06-03 05:06:40.827828883 -0400
Change: 2019-06-03 05:06:40.827828883 -0400
[user001a@dev51 logs]#
Sample1输出:
StartTime=June 3, 2019 at 2:50:02 am
EndTime=June 3, 2019 at 5:06:40 am
ElapsedTime=2 hours, 16 minutes and 38 seconds
Sample2输出:
ElapsedTime=2 hours, 16 minutes and 38 seconds
答案 0 :(得分:0)
此解决方案的限制:最多23小时。要获得更多,需要增加几天。
StartTime="June 3, 2019 at 2:50:02 am"
EndTime="June 3, 2019 at 5:06:40 am"
StartTimeInEpoch=`echo $StartTime | sed 's/at //g' | date -f- +"%s"`
EndTimeInEpoch=`echo $EndTime | sed 's/at //g' | date -f- +"%s"`
echo $EndTimeInEpoch-$StartTimeInEpoch | bc | sed 's/^/@/g' | date -u -f- "+%_H hours %_M minutes %_S seconds"
输出:
2 hours 16 minutes 38 seconds
假设日期已包含在变量StartTime
和EndTime
中。有必要从其中删除at
,sed
为此。然后将两个日期都转换为纪元时间+"%s"
。 -f-
告诉date
从stdin(管道)中获取日期。然后我们可以减去日期,将@
添加到开头,并用date
进行格式化。 -u
表示UTC时间-无时移。