Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用Bash计算并打印两个日期之间的差异?_Linux_Bash - Fatal编程技术网

Linux 使用Bash计算并打印两个日期之间的差异?

Linux 使用Bash计算并打印两个日期之间的差异?,linux,bash,Linux,Bash,我需要一些关于bash脚本的帮助 这是我必须应用脚本的日志(3000行,这是一个示例): 我们要求我打印作业X开始和作业X结束之间的时间间隔,如下所示: Job 1 time elapsed : 600 seconds Job 2 time elapsed : 788 seconds ....... 有人能帮我吗 非常感谢 我不知道您做了什么,但我给您留下了一个简单的shell脚本,您一定能够确定您需要什么 #!/bin/bash date1="2019 nov 30 19:11:37 Jo

我需要一些关于bash脚本的帮助

这是我必须应用脚本的日志(3000行,这是一个示例):

我们要求我打印作业X开始和作业X结束之间的时间间隔,如下所示:

Job 1 time elapsed : 600 seconds
Job 2 time elapsed : 788 seconds
.......
有人能帮我吗


非常感谢

我不知道您做了什么,但我给您留下了一个简单的shell脚本,您一定能够确定您需要什么

#!/bin/bash

date1="2019 nov 30 19:11:37 Job 1 started"
date2="2019 nov 30 20:11:37 Job 1 started"

sec1=$(echo $date1 | cut -d" " -f4)
sec2=$(echo $date2 | cut -d" " -f4)

diff=$(expr $(date -d $sec2 +%s) - $(date -d $sec1 +%s))

echo Job 1 time elapsed : $diff seconds
输出:

Job 1 time elapsed : 3600 seconds

到目前为止你试过什么?你被困在哪里了?gawk有内置的日期操作功能,coreutils有一个有效的日期操作工具(
date
),可以在bash脚本中使用。请显示相关代码并说明确切的问题或错误。仅仅描述是不够的。另请注意,如果这些时间戳在本地时间,并且您的本地时区遵守DST,则您无法可靠地完成您想要做的事情。当他从DST转换到标准时间时,你会得到错误的结果。您需要在时间戳中包含偏移量(例如
-0500
),以避免出现问题job 3
expr$(date-d 00:59:30+%s)-(date-d 22:12:06+%s)
,这已经很奇怪了,运行3天的作业将很困难。真的!您只需更改date-d即可获取更多信息,Bash内置了整数算法。除非您需要支持遗留
sh
,否则您基本上不需要
expr
。另外,还有一些好的提示!谢谢,只是出于好奇,使用expr不是更好吗?因为它在不同的shell之间更便于携带?
Job 1 time elapsed : 3600 seconds