Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件

前面我写了一篇博文Shell 从日志文件中选择时间段内的日志输出到另一个文件,利用循环实现了我想要实现的内容。

但是用这个脚本的同事很郁闷,因为执行时间比较长,越大的文件越长。于是找我,问我能不能实现一个更快的方案。

我想了一下,觉得之前的设计是脱裤子放屁,明明有更加简单的实现方法。

想办法获得我要截取的内容的开始的行号,然后再想办法获得我想截取的文件的结尾的行号,然后用两个行号来进行截断文件并输出。就可以实现这个效果了。

不过想法归想法,实现我还得实验一下,很快解决了问题,如下:

实现代码

#!/bin/bash

# 设定变量
log=3.log
s='2017-08-01T01:3'
e='2017-08-01T01:4'

# 根据条件获得开始和结束的行号
sl=`cat -n $log | grep $s | head -1 | sed 's/^[ \t]*//g' | cut -f1`
el=`cat -n $log | grep $e | tail -1 | sed 's/^[ \t]*//g' | cut -f1`

# 获取结果并输出到 res.log 文件
sed -n  "$sl","$el"'p' $log >> res.log

运行了一下,速度飞起啊!

以上脚本均在 mac 下测试通过,在 Linux 下可能会有稍许不同。

本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。

最新文章

  1. 利用fsockopen可实现异步成功访问
  2. Linux 6.5網卡配置
  3. ZOOKEEPER3.3.3源码分析(四)对LEADER选举过程分析的纠正
  4. google学术反向代理及IPV6免流量上网【教育网BUPT】
  5. UIcollectionView的使用(首页的搭建3)
  6. django datetime format 日期格式化
  7. css高级选择器
  8. struts2+springmvc+hibernate开发。个人纪录
  9. Java之单元测试工具(Junit)
  10. SqlBulkCopy 批量插入
  11. uniDBGrid实行多选表格行
  12. java 文件夹的复制
  13. vs2015连接mysql进行数据库操作
  14. **CI创建类库(创建自己的工具类等)
  15. APICloud 实践 —— 安装与创建应用
  16. iview的Affix插件遇到滚动时候的bug处理方法
  17. Yii框架操作数据库的几种方式与mysql_escape_string
  18. The difference between a local variable and a member variable
  19. Android升级ADT22后会报ClassNotFoundException的原因分析
  20. SaltStack应用grains和jinja模板-第四篇

热门文章

  1. spring数据源、数据库连接池
  2. linux消息队列应用编程
  3. Jquery11 动画效果
  4. 置顶,置低实现与window.scroll
  5. 使用WebUploader实现文件批量上传,进度条显示功能
  6. CentOS 7 Firewalld 常用操作
  7. Objective C Protocol implementation
  8. nagios监控3306端口
  9. HtmlAgilityPach基本使用方法
  10. .net的根目录区别