解析某些时间戳之间的文件内容



我有一个包含大量信息的日志文件,我只想解析该文件的内容,该文件的内容落在最后24小时内

文件中的每行以 Jan 31 13:13:02等时间戳开头,然后具有日志消息。

我当前有一个批处理文件,可以找到这样的开始和结束时间

start=$(date +"%b  %d %H:%M:%S" --date="-1 day")
end=$(date +"%b  %d %H:%M:%S")
然后,我希望与grep -c "data_to_find"一起使用这些时间来查找某个日志消息的出现数量,以便我稍后可以采取行动。 简而

我在Linux系统上,没有任何使用SED,AWK,GREP等解决方案的问题。

如果不编写shell脚本(尤其是在未排序的情况下),这并不是那么简单。

我会尝试这样的事情以在1天前到现在(根据需要插入),然后grep -c从输出中进行任何您想要的管道。请注意,以下假定日期格式类似于Jan 31 13:13:02(月和天之间的2个空间)

#!/bin/bash
yest=$(date -d "1 days ago" '+%s')
today=$(date '+%s')
while read -r line; do
  date=
  [[ $line =~ ^[[:alpha:]]+[[:blank:]][[:blank:]][0-9]+[[:blank:]][0-9]+':'[0-9]+':'[0-9]+ ]] && date="${BASH_REMATCH[0]}"
  [[ -n $date ]] && date=$(date -d "$date" '+%s')
  [[ -n $date && $date -ge $yest && $date -le $today ]] && echo "$line"
done < logfile

这可能很棘手,因为如果当时没有日志输入,则可能不存在确切的一秒钟的时间。

另一种可能性可能是每次阅读日志中添加标记,然后只看最后一个标记后的条目。因此,当您阅读日志时,假设它称为" log.txt",您可以做:

echo marker >> log.txt

然后,当您想从最后一个标记开始读取日志时,您可以找到这样的最后标记:

LASTMARKER=$(grep -n marker log.txt | tail -1 | awk -F: '{print $1}')

并在此之后阅读所有内容:

sed -n "$LASTMARKER,$ p" log.txt
sed -n "/^${start}/,/^${end}/ { /${YourPattern}/ p}" | wc -l

awk当然可以在一个脚本中做到这一点。在SED中,计数有点复杂,因此使用wc(比sed -n '$ ='快一点)。YourPattern是一条正则套件,可与您的日志消息套件找到

相关内容

  • 没有找到相关文章

最新更新