如何在linux下用shell脚本编写实现这个功能:提取从现在到几个小时以前的的log记录?

比如我先grep抓取了一些带了某些关键字的log内容,格式如下:Aug1310:04:0500:B3:42:01:04:38kernel:ConTargetName:iq... 比如我先grep抓取了一些带了某些关键字的log内容,格式如下:
Aug 13 10:04:05 00:B3:42:01:04:38 kernel: Con TargetName:iqn.2010-05.com.macrosan.target:macrosan-1.2810
Aug 13 10:04:05 00:B3:42:01:04:38 kernel: Incremented number of active iSCSI sessions to 1 on iSCSI Target Portal Group: 0
每行最前面是时间,也是我需要用到的筛选条件。

现在比如我要根据当前的系统时间提取5个小时以前一直到现在的上述所有log,该怎么写shell脚本?
我现在的思路是时间逐行做时间比对,大于5个小时的行就舍弃,小于等于5个小时的行就保留,但完全不知道这种比对的shell脚本该怎么写~~~~
或者各位如果有更好的思路麻烦也指明一下~~~

另外log的时间点不是连续的,可能好几分钟都没有记录信息,所以不能通过字符来筛选。
时间是变量,就是先获取当前的系统时间,然后往前推5小时,再根据这个时间点进行筛选。
展开
 我来答
seesea2517
推荐于2016-01-14 · TA获得超过1480个赞
知道小有建树答主
回答量:512
采纳率:100%
帮助的人:547万
展开全部

这个问题我觉得用 awk 比较好实现。我试了一个,不过没找到怎么直接处理这个非数字的月份问题,使用数组来做了一个转换,所以脚本长了一点。

下面是用 message 日志来做的测试,你可以换成你的日志文件来测试看看效果。

你可以更改 time_period 的值来达到想要其它时间内的日志。

# awk -F'[ :]+' 'BEGIN{time_period=5*3600; mon["Jan"] = 1; mon["Feb"] = 2; mon["Mar"] = 3; mon["Apr"] = 4; mon["May"] = 5; mon["Jun"] = 6; mon["Jul"] = 7; mon["Aug"] = 8; mon["Sep"] = 9; mon["Oct"] = 10; mon["Nov"] = 11; mon["Dec"] = 12; now=systime();}; now - mktime("2013 " mon[$1] " " $2 " " $3 " " $4 " " $5) <= time_period {print}' messages
  Aug 13 05:15:01 test ntpdate[26717]: the NTP socket is in use, exiting
  Aug 13 05:25:01 test ntpdate[26782]: the NTP socket is in use, exiting
  Aug 13 10:05:01 test ntpdate[29013]: the NTP socket is in use, exiting
  Aug 13 10:10:01 test ntpdate[29076]: the NTP socket is in use, exiting
更多追问追答
追问
我这里直接拿你的这段代码用messages做测试,但是没有输出任何结果,messages里确实有符合条件的数据。
追答

会不会你的系统时间不是 2013 年呢?我这里方便测试直接固定了 2013 年了。

下面改了一下,用当前的年份来做取数据:

awk -F'[ :]+' 'BEGIN{time_period=5*3600; mon["Jan"] = 1; mon["Feb"] = 2; mon["Mar"] = 3; mon["Apr"] = 4; mon["May"] = 5; mon["Jun"] = 6; mon["Jul"] = 7; mon["Aug"] = 8; mon["Sep"] = 9; mon["Oct"] = 10; mon["Nov"] = 11; mon["Dec"] = 12; now=systime();}; now - mktime(strftime("%Y") " " mon[$1] " " $2 " " $3 " " $4 " " $5) <= time_period {print}' messages

对于跨年的情况考虑来会复杂点,有需要你想想修改一下吧。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式