linux下日志文本文件等的按行截取和按时间截取

服务器的日志文件一般都很大,对日志文件进行截取是在对服务器日志排查时必不可少的工作。以下几个命令比较有用。

    第一:定位要提取的日志的起始行,加上-n标记所在行数,加上--color以进行颜色提示。

grep -n searchword 201609.log --color

     第二:取出所要截取的起始行数之后可利用以下三种命令进行截取。

sed -n "1013,1017p" 201609.log > a.log

cat 201609.log | tail -n +1013 | head -n 5 > c.log

cat 201609.log | head -n 1017 | tail -n +1013 > b.log

     sed命令比较容易理解,使用head和tail结合取文件时要注意顺序和参数。上面三个命令的执行结果是相同的。第二个命令的意思是从日志的1013行开始开始截取,只截取5条日志。最后的一条命令是截取到日志的1017行,再在这个结果中从1013行开始截取,也就是取的1013行到1017行的日志。看如下一条命令:

cat 201609.log | tail -n +1013 | head -n 1017 > d.log

     看起来和上面的命令有点相似,但是意义是不同的,它是先取日志从1013行开始的日志,然后再从结果中提取前面的1017行。实际得到的就可能是1017行日志(最多)。

    对于日志文件的按日期截取,需要使用到awk命令。nginx默认的日志格式如下:

66.249.79.87 - - [09/Sep/2016:10:19:06 +0800] "GET /article/180.html HTTP/1.1" 200 10521 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -

     命令awk命令如下:

cat access.log | awk '$4 >="[30/Aug/2016:21:10:00" && $4 <="[01/Sep/2016:21:10:00"' > ~/2dayaccess.log



转自:linux下日志文本文件等的按行截取和按时间截取-04007技术笔记

你可能感兴趣的:(linux下日志文本文件等的按行截取和按时间截取)