我有一个日志文件,其中包含以下格式的数据
[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,Memory,
我包含过去 7 天的所有数据。我想 grep 这个文件以显示昨天的日志。这里日期显示为时间戳。我正在使用以下命令
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
的计算时间戳值.
这很有效,但问题是我如何通过 1361989800
和1362076199
作为参数??
最佳答案
您只需要awk
为此。
awk -va=1361989800 -vb=1362076199 '{gsub(/[][]/,"")}/qa-hadoop1|CRITICAL|NOTIFICATION/&&$1>a&&$1<b' file
-v
options 允许您传入变量。也可以使用gsub
删除第一个字段上整数比较的括号(空格分隔而不是逗号)。
注释:
grep
读取文件,因此您不需要cat file | grep 'pattern'
只是grep 'pattern' file
您也可以使用类似 egrep 'qa-hadoop1|CRITICAL|NOTIFICATION' file
的交替所以你不需要通过管道连接到 grep
三次。
更多awkish
awk -F, '{ if ($1>"[1361989800]" && $1<"[1362076199]") print }'
的版本是 awk -F, '$1>"[1361989800]" && $1<"[1362076199]"'
你不需要if
awk
中的构造和默认 block 是打印。
关于linux - 如何在 Linux 中 grep 特定时间戳范围内的日志文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154083/