Shell 从日志文件中选择时间段内的日志输出到另一个文件
来源:互联网 发布:手机淘宝怎么改差评 编辑:程序博客网 时间:2024/05/17 20:34
Shell 从日志文件中选择时间段内的日志输出到另一个文件
情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便。所以,相关人员希望能够查询某个时间段内的日志。我简单些了一个脚本来实现了这个效果。
不过我的实现不是最佳方案,性能上还有很大的优化空间,但我目前水平有限,没有想到更好的方法。
分析日志
5074400:2017-08-01T01:34:22.724252+00:00 test_rest_1.test_default bpmn_test: [2017/08/01 09:34:22,723] trump.restapi preprocess: 8bc570ee765911e799070242ac120006 - GET profile:{}:None
日志内容如上,每一行的格式都差不多。里面有两个时间的参数,我决定取后面的这个时间的参数。想一下,应该很容易取到。
然后拿这个时间和我们设定的开始时间和结束时间进行比较,如果在时间段之内,则把这一行字符串插入到一个新的文件。
逻辑清晰,开始实现。
实现 shell 脚本
# 设定开始时间s='2017/08/01 0:0:0'# 设定结束时间e='2017/08/01 24:0:0'# 读取 3.log 这个原始文件,并且逐行循环cat 3.log | while read line; do # 每读取一行,就在终端打一个#号,以便我知道这脚本还活着 :) # -n 是让 echo 的内容在前面追加,而不是换行 # 在 mac 下面,用 sh log.sh 的方式运行会出错,不知道为什么 # 换成 bash log.sh 则可以顺利运行 echo -n "#" # 用 cut 方式取得每一行的时间,并赋予变量 t=$(echo $line | cut -f 2 -d \[ | cut -f 1 -d \,) # 如果 t 在我们设定的时间段内 if [[ "$t" > "$s" ]] && [[ "$t" < "$e" ]]; # 则将改行追加到 new.log 文件 then echo $line >> new.log fidone
好,逻辑非常清晰的实现了这个脚本。但是遇到了脚本兼容性的问题。我没搞明白为什么 sh log.sh
运行方式下 echo -n
这个参数会出问题。但是在 bash log.sh
的情况下是按照我的理解正常输出的。
问了下同事,shell 兼容性问题是一个很常见的问题。
优化这个脚本
同事给出了一个新的语法,不甚理解,但是据说效率会提升很多。代码如下:
# 设定开始时间s='2017/08/01 0:0:0'# 设定结束时间e='2017/08/01 24:0:0'# 读取每一行循环while read line; do # 每读取一行,就在终端打一个#号,以便我知道这脚本还活着 :) # -n 是让 echo 的内容在前面追加,而不是换行 # 在 mac 下面,用 sh log.sh 的方式运行会出错,不知道为什么 # 换成 bash log.sh 则可以顺利运行 echo -n "#" # 用 cut 方式取得每一行的时间,并赋予变量 t=$(echo $line | cut -f 2 -d \[ | cut -f 1 -d \,) # 如果 t 在我们设定的时间段内 if [[ "$t" > "$s" ]] && [[ "$t" < "$e" ]]; # 则将改行追加到 new.log 文件 then echo $line >> new.log fi# 3.log 作为参数传进来done < 3.log
同事解释了一下原理,没听懂,但确实可以运行,并且效率有所提高。
2017年08月03日补充
上面循环的方法是在是太浪费时间了,所以换了一个思路,实现了同样的效果。参见 Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件
以上脚本均在 mac 下测试通过,在 linux 下可能会有稍许不同。
本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。
阅读全文
1 0
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
- Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件
- 在log4j中,输出另一个日志文件的配置方式
- 【shell】shell脚本在大文件日志中按照时间段快速搜索日志
- weblogic后台日志输出到文件中
- NS3中日志信息输出到文件
- weblogic后台日志输出到文件中
- qt之输出日志到文件中
- log4j不同的日志输出到不同的文件中
- grep 正则查询 日志文件中某一时间段的行数
- 将tomcat的日志输出到日志文件中,重命名tomcat启动文件
- shell将脚本输出结果记录到日志文件
- ACE 输出日志到文件
- Log4j-日志输出到文件
- Qt日志输出到文件
- kettle5+日志输出到文件
- 用log4j如何使不同的类的日志输出到不同的日志文件中.
- 怎样将shell命令的输出信息同时显示在屏幕和保存到日志文件中
- 前端框架Ext学习之框架搭建
- 基础图论
- ASP .NET – TextBox 控件
- 【C++数据结构与算法】学习随笔二
- vue分页组件编写
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
- iOS之NSProcessInfo的使用
- java基础-----集合 set
- 2015多校第8场 HDU 5385 贪心,最小生成树
- win8升级win10后的windows.old怎么删除
- FTP服务搭建
- 设计模式之原型模式
- 手机通讯录增删改查(在ListView上面操作),复杂
- hdu 多校联赛 RXD and math