Linux 查询一段时间内的日志

工作原理

一般情况下,日志的内容是按照时间顺序依次写入的。因此可以按照行号来定向查询。

注意

如果同一个文件内,是同一日期的日志,则只需要按照时间查询即可。

如果同一文件内有多个日期,则需要按照日期和时间一起查询才准确。

实际操作

#第一步,查询开始时间的行号,如果没有返回,则换个时间查询(查询时间的时候,一般首位要加一个空格,防止查询的不是以小时单位为开头的时间,模糊时间可以用【*】代替)

cat -n abc.log |grep ' 09:00:*' | head -n 1| awk '{print $1}'
>>683051

 #第二步,查询结束时间的行号,如果没有返回,则换个时间查询

cat -n abc.log |grep ' 10:00:*' | head -n 1| awk '{print $1}' 
>>1204936

#第三步,查询从开始时间的行号,到结束时间的行号内的所有日志。

sed -n 683051,1204936p abc.log 

简化版:将上面3个步合并成一条命令

paste -d , <( cat -n abc.log |grep ' 09:00:*' | head -n 1| awk '{print $1}' ) <( cat -n abc.log |grep ' 10:00:*' | head -n 1| awk '{print $1}' ) |xargs -I {} sed -n {}p abc.log

相关知识

  • paste <(date) <(date) #将2个date命令的结果用空格或TAB拼接成一行(注意每个【)】与【<】z之间必须有空格并且只能是空格,【<】与【(】之间不能有空格)。paste <(date) <(date) <(echo abc) #同上这是3个命令的结果进行拼接,多个命令以此类推。
  • xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次
  • head -n 2000 abc.log #从文件第一行开始,输出2000行abc.log的文件内容。
  • awk '{print $1,$4}' #每行按空格或TAB分割,输出文本中的1、4项
  • sed 可依照脚本的指令来处理、编辑文本文件。
  • cat 命令用于连接文件并打印到标准输出设备上。
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值