微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Linux的特定时间戳范围内logging日志文件的内容?

我有一个日志文件,它有以下格式的数据

[1361991081] SERVICE NOTIFICATION: qreda;qa-hadoop1;cpu Load;CRITICAL;notify-service-by-email;CRITICAL - load average: 18.29,18.14,18.10 [1361991371] SERVICE NOTIFICATION: qreda;CRITICAL-SERVICES_FOR_LAST_24_HOURS;qa-hadoop1:Critical Services;CRITICAL;notify-service-by-email;cpu Load,Memory,[1361994681] SERVICE NOTIFICATION: qreda;qa-hadoop1;cpu Load;CRITICAL;notify-service-by-email;CRITICAL - load average: 18.02,18.06,18.11 [1361994971] SERVICE NOTIFICATION: qreda;CRITICAL-SERVICES_FOR_LAST_24_HOURS;qa-hadoop1:Critical Services;CRITICAL;notify-service-by-email;cpu Load,

我包含过去7天的所有数据。我想grep这个文件显示昨天的日志。 这里date显示为时间戳。 我正在使用以下命令

cat /usr/local/nagios/var/nagios.log |grep qa-hadoop1|grep CRITICAL|grep NOTIFICATION | awk -F,'{ if ($1>"[1361989800]" && $1<"[1362076199]") print }'

其中1361989800是Thu Feb 28 00:00:00 IST 2013的计算时间戳值

和1362076199是Thu Feb 28 23:59:59 IST 2013的计算时间戳值。

匹配LINK grep命令string之间的任何内容

使用Sed去除前导和尾随空格的问题

如何提取unix中两个单词之间的文本?

如何删除具有特定string的所有行,但不删除同一文件的特定部分中包含相同string的行

如何使用FINDSTR只获得匹配模式的行号

这工作得很好,但问题是我如何通过1361989800和1362076199作为参数?

将variables与存储在数组中的值进行高效匹配

删除模式之前的所有东西,包括使用awk或sed的模式

在Linux上的多个图像中search给定的hexstring

如何在没有正则expression式的情况下匹配标签内容

UNIX Case语句中的模式匹配

你只需要这个awk 。

awk -va=1361989800 -vb=1362076199 '{gsub(/[][]/,"")}/qa-hadoop1|CRITICAL|NOTIFICATION/&&$1>a&&$1<b' file

-v选项允许你传入变量。 另外通过使用gsub删除一个字段的整数比较的括号(空格分隔而不是逗号) 。

笔记:

grep读取文件,所以你不需要cat file | grep 'pattern' egrep 'qa-hadoop1|CRITICAL|NOTIFICATION' file cat file | grep 'pattern'只是egrep 'qa-hadoop1|CRITICAL|NOTIFICATION' file ,你也可以使用像egrep 'qa-hadoop1|CRITICAL|NOTIFICATION' file这样egrep 'qa-hadoop1|CRITICAL|NOTIFICATION' file所以你不需要管道grep三次。

awk -F,'{ if ($1>"[1361989800]" && $1<"[1362076199]") print }' awk -F,'$1>"[1361989800]" && $1<"[1362076199]"'你不需要if构造, awk的认块是print。

以下是使用命令行参数分配的一种方法

grep qa-hadoop1 input | grep CRITICAL| grep NOTIFICATION | awk -F,-vb=1361989800 -ve=1362076199 '{ if ( $1 > "["b"]" && $1<"["e"]") print }'

除了你的cat|grep|grep|grep|awk ,我会问,为什么把awma的逗号设置为FS ,后来比较$ 1和timestamp? $ 1是从开始到第一个逗号,这是不正确的。

FS应该是空格,如果你想比较日期,就像你的if语句。

它可能工作,如果你从你的awk行部分删除-F,。 尝试一下。

更简单一点,你可以把[或]当作FS 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐