相关文章推荐
安静的油条  ·  超简单,用Python ...·  2 年前    · 
眉毛粗的手术刀  ·  unity实现防穿模渲染与uv映射!_手机搜狐网·  2 年前    · 
善良的凉面  ·  数据库表格分页 html,Quasar ...·  2 年前    · 
温柔的香烟  ·  如何使用pywinauto获取托盘中图标的数 ...·  2 年前    · 
有腹肌的围巾  ·  用Excel数据透视表刷新数据,掌握8个妙招 ...·  2 年前    · 
Code  ›  Shell 从日志文件中选择时间段内的日志输出到另一个文件开发者社区
https://cloud.tencent.com/developer/article/1015516
含蓄的饭盒
2 年前
作者头像
FungLeo
0 篇文章

Shell 从日志文件中选择时间段内的日志输出到另一个文件

前往专栏
腾讯云
备案 控制台
开发者社区
学习
实践
活动
专区
工具
TVP
文章/答案/技术大牛
写文章
社区首页 > 专栏 > 地方网络工作室的专栏 > 正文

Shell 从日志文件中选择时间段内的日志输出到另一个文件

发布 于 2018-01-08 15:29:38
1.3K 0
举报

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
done

好,逻辑非常清晰的实现了这个脚本。但是遇到了脚本兼容性的问题。我没搞明白为什么 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 在我们设定的时间段内
 
推荐文章
安静的油条  ·  超简单,用Python Pyecharts制作可视化大屏 - 知乎
2 年前
眉毛粗的手术刀  ·  unity实现防穿模渲染与uv映射!_手机搜狐网
2 年前
善良的凉面  ·  数据库表格分页 html,Quasar Table: 自定义分页样式_小安w的博客-CSDN博客
2 年前
温柔的香烟  ·  如何使用pywinauto获取托盘中图标的数量-腾讯云开发者社区-腾讯云
2 年前
有腹肌的围巾  ·  用Excel数据透视表刷新数据,掌握8个妙招,提效70%_澎湃号·湃客_澎湃新闻-The Paper
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号