0

我确信这个答案是显而易见的,但我正在努力解决它并且头疼,我的 Search 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…..

我的最终目标是:

  1. 使用给定的字符串在日志文件中查找最后一行,例如:“这是行……”这是我的“神奇时间”,稍后我将进行计算。

  2. 取该行的日期并设置一个变量,即日期 +NN 秒。未来的时间通常会从步骤 1 的时间开始在未来的 24 小时内,因此如果这很重要,则可能会进入第二天。

  3. 在脚本中的某个时间点,将系统时钟提前到新的日期/时间,之后我将检查某些事件是否要触发。

我知道这是错误的,但到目前为止我已经想出了如何:

  1. 抓住我活动的最后一个日期戳。

    日志日期=cat /logdir/my.log | grep "THIS IS THE LINE" | tail -1 | cut -f1,2,3 -d" "

返回:9 月 1 日 16:55:02

  1. 将日期转换为更可用的格式

    logDate2="$(date -d "$logDate" +"%m-%d %H:%M:%S")"; 回声 $logDate2

返回:09-17 16:55:02

  1. 我被困在这里 - 我想要的是:

    未来日期=$logdate2 + XXXSeconds

有人可以帮我计算时间,或者指出一个更好的方法来完成这一切吗?

谢谢。

4

2 回答 2

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}")
于 2013-09-16T17:55:55.640 回答
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"
于 2013-09-16T18:02:41.650 回答