从命令响应中选取日期

从命令响应中选取日期

我有一个看起来像这样的命令响应:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXX  |   XXX | Thu Oct 18 03:32:00 UTC 2018

XXX  |   XXX | Thu Oct 18 03:32:00 UTC 2018

每组字符和管道之间有很多制表符空格。目的是从响应中挑选出日期,然后将其与当前时间进行比较,找出差异并确保其不超过 300 秒。这是我第一次制作 shell 脚本,我不确定它是如何工作的。

我尝试使用 grep 来获取整行。有没有办法忽略字符之间的空格?如何将该日期格式转换为常规日期格式?

答案1

#!/bin/bash
grep 'UTC\|EDT\|EST' file | cut -d' ' -f 8 | while IFS= read line; do

now=$(date | cut -d' ' -f 4)

time_now=$(date -u -d "$now" +"%s")   #seconds
time_line=$(date -u -d "$line" +"%s") #seconds

difference=$(echo $((time_now - time_line)))

  if [ $difference -lt 300 ] 

     then
       echo "Time difference is less than 300 seconds"

     else 
       echo "Time difference is more than 300 seconds"
   fi

done

答案2

在这里,您可以获得当前日期/时间与文件中每个日期的差异(以秒为单位):

sed -rn '/([[:alpha:]]{3} ){2}([ [:digit:]]{2}[ :]){4}/ s/^.*\|[[:space:]]*//p' file | date +"echo \$(( $NOW - %s ))" -f- | sh
109431
109431

输出格式以及如何处理它需要指定......

相关内容