我确信这个答案是显而易见的,但是我正在敲打它并且头疼,我的搜索Foo让我失望......
我有一个日期格式的日志文件:
Sep 1 16:55:00 stuff happening
Sep 1 16:55:01 THIS IS THE LINE YOU WANT at this time stamp
Sep 1 16:55:02 more stuff
Sep 1 16:55:02 THIS IS THE LINE YOU WANT at this time stamp
Sep 1 16:55:03 blah
Sep 1 16:55:04 blah and so on…..
我的最终目标是:
使用给定的字符串查找日志文件中的最后一行,例如:“这就是线......”这是我将在稍后进行计算的“神奇时间”。
获取该行的日期并设置一个日期为+ NN秒的变量。从第1步开始,将来的时间通常会短短24小时,如果这很重要,可能会进入第二天。
在脚本中的某个时刻,将系统时钟提前到新的日期/时间,之后我将检查要触发的某些事件。
我知道这是错误的,但到目前为止我已经想出了如何:
抓住我活动的最后日期戳。
LOGDATE = cat /logdir/my.log | grep "THIS IS THE LINE" | tail -1 | cut -f1,2,3 -d" "
返回:9月1日16:55:02
将日期转换为更实用的格式
logDate2 =“$(date -d”$ logDate“+”%m-%d%H:%M:%S“)”; echo $ logDate2
返回:09-17 16:55:02
我被困在这里 - 我想要的是:
futuredate = $logdate2 + XXXSeconds
有人可以帮助我计算时间,或者指出更好的方法来完成所有这些工作吗?
感谢。
答案 0 :(得分:1)
I'm stuck here - what I want is: futuredate=$logdate2 + XXXSeconds
您可以通过时间戳转换来实现:
# convert log date to timestamp
logts="$(date -d "$logDate" '+%s')"
# add timestamp with seconds
futurets=$(( logts + XXXSeconds ))
# get date based from timestamp, optionally you can add a format.
futuredate=$(date -d "@${futurets}")
答案 1 :(得分:1)
# Get time in seconds from the epoc (1970-01-01 00:00:00 UTC)
dateinseconds=$(date +"%s" -d "$(tail -1 logfile | grep "THIS IS THE LINE" | awk '{print $1, $2, $3}')")
# You can also use just awk without grep and tail to match and print the last line
dateinseconds=$(date +"%s" -d "$(awk '{/THIS IS THE LINE/}END{print $1, $2, $3}' logfile)")
gotofuture=$(( $dateinseconds + 2345 )) # Add 2345 seconds
newdate=$(date -d "@${gotofuture}")
echo "$newdate"