想要取出文件里面时间是9点到12点的数据,文件内容如下:

2012-09-05
01:48:47,150 WARN  [WorkManager(3)-72]
[service.PhoneRangeManager] phone range domain object not found id
1834930
2012-09-05
02:48:47,293 WARN  [WorkManager(3)-28]
[service.PhoneRangeManager] phone range domain object not found id
1834930
2012-09-05
03:50:14,085 WARN  [WorkManager(3)-61]
[service.PhoneRangeManager] phone range domain object not found id
1881137
2012-09-05
04:50:14,223 WARN  [WorkManager(3)-67]
[service.PhoneRangeManager] phone range domain object not found id
1881137
2012-09-05
05:50:14,361 WARN  [WorkManager(3)-14]
[service.PhoneRangeManager] phone range domain object not found id
1881137
2012-09-05
06:51:29,011 WARN  [WorkManager(3)-70]
[service.UserAccountLockService] Thread :325 continue to wait for
lock of user :13620003572 , signal = TransactionImple
< ac, 
2012-09-05
07:51:29,011 WARN  [WorkManager(3)-70]
[service.UserAccountLockService] Thread :325 continue to wait for
lock of user :13620003572 , signal = TransactionImple
< ac, 
2012-09-05
08:51:29,011 WARN  [WorkManager(3)-70]
[service.UserAccountLockService] Thread :325 continue to wait for
lock of user :13620003572 , signal = TransactionImple
< ac, 
2012-09-05
10:51:29,011 WARN  [WorkManager(3)-70]
[service.UserAccountLockService] Thread :325 continue to wait for
lock of user :13620003572 , signal = TransactionImple
< ac, 
BasicAction:
-3f57fefa:8d29:50463160:ddaee80 status: ActionStatus.RUNNING
>, lock
:com.wxxr.common.service.UserAccountLockService$Lock@10b3d72
2012-09-05
11:52:02,732 WARN  [WorkManager(3)-46]
[service.PhoneRangeManager] phone range domain object not found id
1881137
2012-09-05
12:52:02,873 WARN  [WorkManager(3)-19]
[service.PhoneRangeManager] phone range domain object not found id
1881137
2012-09-05
09:52:03,010 WARN  [WorkManager(3)-95]
[service.PhoneRangeManager] phone range domain object not found id
1881137

需要注意的是一条日志可能占两行。
执行代码如下:
awk -F'[ -:]' '$4 >= 9 && $4 <= 12{print;nextline=NR+1}$1$2$3 !~ /\d+/ && NR == nextline' data
 
讲解:

awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
 [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
'  '          引用代码块
BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
//           匹配代码块,可以是字符串或正则表达式
{}           命令代码块,包含一条或多条命令
;          多条命令使用分号分隔
END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
 
特殊要点:
$0           表示整个当前行
$1           每行第一个字段
NF          字段数量变量
NR          每行的记录号,多文件记录递增
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'   定义三个分隔符

使用awk截取某时间段的日志的更多相关文章

  1. CentOS7之按时间段截取指定的Tomcat日志到指定文件的方法

    CentOS7之按时间段截取指定的Tomcat日志到指定文件的方法 sed -n '/2016-11-02 15:00:/,/2016-11-02 15:05:/p' catalina.out > ...

  2. linux   截取时间段的日志

      sed -n '/14:[0-9][0-9]:[0-9][0-9]/p’ haproxy.log  截取14点的日志   cat  haproxy.log-20160302 | grep xslh ...

  3. Linux学习26-linux查看某个时间段的日志(sed -n)-史上最详细

    前言 在linux上查找日志的时候,如果我想找出某个时间段的日志,比如查找今天早上8点到下午2点的日志. 用grep不太方便直接过滤出来,可以使用sed根据时间去查找 sed -n '/开始时间日期/ ...

  4. linux 查询某个时间段的日志

    目前因发生了异常大概记得发生的时间段,想查看这个时间段的日志 如我们的日志格式如下 1:09:59.946 [http-nio-12129-exec-10] INFO ntroller start = ...

  5. awk 截取某段时间的日志

    好久没有截取nginx/haproxy 中 的日志了,竟有点不熟悉了. 记录一下,以免以后忘记. NGINX 日志格式: 192.168.1.26 - - [14/Sep/2017:16:48:42 ...

  6. grep/sed/awk命令查看指定时间段的日志

    *grep命令 今天遇到研发要求查询定时任务(elastic-job)在14:00-14:40的日志,使用grep命令很方便: 命令: grep '时间' '日志文件名 ' 1.例如查询2020-02 ...

  7. Linux下截取指定时间段日志并输出到指定文件

    sed -n '/2019-04-22 16:10:/,/2019-04-22 16:20:/p' log.log > bbb.txt

  8. Awk,Cat,Head分析Nginx日志常用命令

    Nginx 日志分析   1.根据访问IP统计UV   awk '{print $1}'  access.log|sort | uniq -c |wc -l   2.统计访问URL统计PV   awk ...

  9. txt文件按行处理工具类(可以截取小说、分析日志等)【我】

    txt文件按行处理工具类(可以分析日志.截取小说等) package file; import java.io.BufferedReader; import java.io.BufferedWrite ...

随机推荐

  1. iOS超全开源框架、项目和学习资料汇总:UI篇

    上下拉刷新控件 1. MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.(推荐) 2. S ...

  2. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  3. 文件下载类型__response

    response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据. 例如web浏览器就是通过MI ...

  4. JAVA中的栈和堆

    JAVA在程序运行时,在内存中划分5片空间进行数据的存储.分别是:1:寄存器.2:本地方法区.3:方法区.4:栈.5:堆. 基本,栈stack和堆heap这两个概念很重要,不了解清楚,后面就不用学了. ...

  5. sqlite数据库学习

    1.0版代码: package com.swust.sqlitedatabase.test; import com.swust.sqlitedatabase.myOpenHelper; import ...

  6. IIS7.0发布后关于"不能在此路径中使用此配置节”的解决办法

    在系统为window sever2008,iis7.0上安装后发布出现 IIS Web Core 通知 BeginRequest 处理程序 尚未确定 错误代码 0x80070021 配置错误 不能在此 ...

  7. C#用DesignSurface实现一个简单的窗体设计器

    System.ComponentModel.Design.DesignSurface是为设计组件提供一个用户界面,通过它可以实现一个简单的窗体设计器. 在构建之前,我们需要引入System.Desig ...

  8. CSS3高级选择器

    CSS3中添加了一些新的选择器 与之前的不同 这些选择器有些类似于jquery的选择器 能够让我们更高的操作DOM 废话不多说 为了更直观的了解 我们以这段为实例 来进行操作 <!DOCTYPE ...

  9. (一) 从Angular1到Angular2的杂谈

    使用了angular1一年下来,完成了若干项目,承蒙此框架的强大带来了不算差的项目编写体验,但1.*版本的angular,确实是有厉害的地方也有其尴尬的地方,包括较多数据的渲染的性能问题,还有就是可能 ...

  10. php正则表达式(持续更新)

    1.字符串替换多个关键字 $pattern = array('/a/', '/a/', '/a/'); $replacement = array('x', 'y', 'z'); $subject = ...