linux查看日志某段时间段grep,按时间段进行日志筛选的三种Shell编写方法

144700866_1_20180919111050644

tips:阅读了本文,你将了解到哪个命令效率最高,哪个命令编写最简单

在日常系统维护、问题排查时,经常需要对系统后台日志进行筛选过滤。如果对特定时间段的日志进行筛选,该如何编写Shell脚本(命令)呢?本文给出三种常用的Shell编写方法:grep、gawk和sed。

日志筛选需求描述:从2017年12月22日的日志文件中,统计时间段13:30~18:00之间包含筛选词“open.app”的日志行数。

本系统后台日志格式如下图所示:

从图中可以看出每行日志以“yyyy-MM-dd HH:mm:ss”开头,故要筛选一段时间的日志,就要匹配该日志的时间前缀。

接下来文章分别介绍使用grep、gawk和sed命令,如何进行相关的Shell脚本(命令)的编写。

1grep命令

在日志筛选、搜索中,grep是使用频率较高的命令。对于grep命令来说,如果筛选一段时间的日志,需要进行多条件相并过滤,使用正则表达式进行处理。对于13:30~18:00时间段来说,可以转化为下面表格多个时间相并。序号筛选条件筛选时间段

12017-12-22 13:313:30:00~13:39:59

22017-12-22 13:413:40:00~13:49:59

32017-12-22 13:513:50:00~13:59:59

42017-12-22 1414:00:00~14:59:59

52017-12-22 1515:00:00~15:59:59

62017-12-22 1616:00:00~16:59:59

72017-12-22 1717:00:00~17:59:59

命令如下:grep -E '^2017-12-22  13:3|^2017-12-22 13:4|^2017-12-22 13:5|^2017-12-22 14|^2017-12-22  15|^2017-12-22 16|^2017-12-22 17' 2017-12-22.log.txt | grep  'open.app' | wc -l

运行结果如下图:

共检索筛选到71314条。

上述命令条件可以使用正则表达式进行缩减,命令如下:grep -E '^2017-12-22  13:[3,4,5]|^2017-12-22 1[4,5,6,7]' 2017-12-22.log.txt | grep  'open.app' | wc -l

运行结果如下图所示:

检索筛选到71314条,和上述命令一致。

2gawk命令

gawk命令是功能强大、可编程的Linux命令。使用gawk命令筛选一段时间的日志,其思路是首先截取出每行日志的“yyyy-MM-dd HH:mm:ss”19位时间前缀,然后将该前缀字符串与“2017-12-22 13:30:00”、“2017-12-22 18:00:00”进行比较,不在该范围的日志则丢弃。

命令脚本如下所示:cat 2017-12-22.log.txt  | gawk '

{

time = substr($0, 1, 19);

if(('2017-12-22 13:30:00' <= time)="" &&=""  (time="">=>< '2017-12-22="" 18:00:00'))="">

{

print($0);

}

}

' | grep  'open.app' | wc -l

运行结果如下图所示:

共检索筛选到71314条。

注:需要注意“2017-12-22 18:00:00”使用的是小于符号,而不是小于等于符号。

3sed命令

sed是一种流编辑器命令,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。使用sed命令选定行的范围语法,既是逗号语法。

命令如下所示:sed -n '/2017-12-22  13:30:00/,/2017-12-22 18:00:00/p' 2017-12-22.log.txt | grep  'open.app' | wc -l

运行结果如下图所示:

共检索筛选到71314条。

注:该sed命令含义是选定行范围:从第一行“2017-12-22 13:30:00”开始,到第一行“2017-12-22 18:00:00”结束,包括第一行“2017-12-22 18:00:00”。如果不筛选“open.app”关键字,单纯计数,则sed命令比如上述grep和gawk命令多筛选出一条。

4命令比较

对命令运行时间和命令编写的复杂性进行对比,结果如下表所示:命令耗时(秒)命令复杂性

grep50低

gawk122高

sed61低

从表中可以看出,grep命令运行时间最短;gawk命令运行时间最长,而且命令编写较为复杂。另外sed命令运行时间跟grep相近,但是sed命令对时间段适应性较好。如果时间段扩大,grep命令修改较大,而sed命令修改较小。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值