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

前端之家收集整理的这篇文章主要介绍了Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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 原创,允许转载,但转载必须保留首发链接

猜你在找的Bash相关文章