之前的一篇文章中提到了使用grep -o来从不规则列/非固定列中截取关键字的方法,链接如下

http://blog.csdn.net/qingsong3333/article/details/77342085

在学习了awk之后,发现awk可以使用内置变量+内置函数实现相同的功能,还是以之前的那个log为例子:某数据库的log.txt中,每访问一次表,就会记录一条信息"TableId = x",其中x为整数数字,但其他部分的文本没有任何规律。我们需要统计出每个表访问的次数,并按照访问次数排序:

例如某日志如下:
qingsong@db2a:~$ cat log.txt
Hello, world, TableId = 19039 jl
This is a long story TableId = 1909 jlsfd
TableId = 39 sdlf where
PID : 28703 TID : TableId =
he TableId = 9 EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, Self tuning memory manager, stmm
### TableId = 29099 ::: ::
SSAGE : ADM7513W TableId = 1 SSAGE : ADM7513W
Are you TableId = 9
2017-08-16-23.36.17.920719 Hello, world, TableId = 29099 xxl
Hello, world, TableId = 19039 jl
This is a long story TableId = 1909 jlsfd
TableId = 393 sdlf where
PID : 2 TableId = 8703 TID :
he TableId = 19 EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, Self tuning memory manager, stmm
anager, stmm ### TableId = 29099 ::: ::
Sanager, stmmSAGE : ADM7513W TableId = 1 SSAGE : ADM7513W
Are you TableId = 9 anager, stmm
719 Hello, world, TableId = 29099 xxl2017-08-16-23.36.1

使用awk完成的关键之处有两点:首先,使用match函数匹配关键字,如果某个子串匹配,就打印该子串。第二点,打印该子串后,将行的内容重新赋值为该子串后面的内容。
例如,某一行内容为"aa123bb456",要匹配数字。首先找到第一个匹配的子串为123,匹配之后,打印该子串;然后将该行内容重置为123之后的内容,即"bb456",重新匹配,直到没有可以匹配的子串,具体实现如下:
qingsong@db2a:~$ awk '
> {
>      r = "TableId = [0-9]+"
>      while (match($0,r)) {
>           print substr($0, RSTART, RLENGTH)        #打印匹配的子串
>           $0 = substr($0, RSTART + RLENGTH)      #将该行内容重置为匹配子串后面的内容
>      }
> }' log.txt
TableId = 19039
TableId = 1909
TableId = 39
TableId = 9
TableId = 29099
TableId = 1
TableId = 9
TableId = 29099
TableId = 19039
TableId = 1909
TableId = 393
TableId = 8703
TableId = 19
TableId = 29099
TableId = 1
TableId = 9
TableId = 29099

qingsong@db2a:~$ awk '
> {
>      r = "TableId = [0-9]+"
>      while (match($0,r)) {
>           print substr($0, RSTART, RLENGTH)
>           $0 = substr($0, RSTART + RLENGTH)
>      }
> }' log.txt | awk '{print $3}' | sort -n | uniq -c | sort -nr
4 29099
3 9
2 1909
2 19039
2 1
1 8703
1 393
1 39
1 19

Linux文本处理:从不规则列/非固定列中截取关键字-方法2相关推荐

  1. Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置

    Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置 grep [选项]... PATTERN [FILE]... grep -C N,(N代表一个整数)是搜索关键字出现位置,并且 ...

  2. linux 扩展zhu分区,Linux分区调整(LVM和非LVM环境中扩容和缩小)

    前言:我的上一篇博文详细介绍了磁盘.格式以及分区知识,里面也涉及了LVM,本文主要实践下LVM和非LVM环境中Linux分区如何扩容和缩小. 分区调整原理: Linux磁盘分区和磁盘格式紧密相连,想要 ...

  3. linux查询关键词上下行_Linux:从文件中搜索关键字并显示行数(cat,grep函数)

    学点HTTP知识 不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需 ...

  4. c语言向表格内存入数据,怎么实现横向到存入多个单元格,在列数固定的报表中逐格横向填充数据并折行...

    在很多需要打印的报表中,受限于纸张的大小,往往会限制行数或者固定列数.我们在<单据类报表的制作>一文中,曾经介绍了限制了行数的情况如何实现,现在,我们再来看一下,在固定了列数的情况下,如果 ...

  5. 关于js表格固定列实现

    一.概述 在开发过程中前端列表展示数据对比查看的情况是比较常见的,我最近接到的一个任务就是要处理这样的数据:一般这种需求将某一列或几列进行横向固定然后其它不固定的列可以照常实现x轴的滚动: 话不多说先 ...

  6. HTML中表格固定列锁定

    本文主要介绍通过css实现表格固定列锁定及锁定后左右两个表格高度一致. 一.实现表格固定列的原理是,通过两个div,固定列div的css float设置成left,非固定列css overflow-x ...

  7. 非固定边界网格参数化(ARAP)

    非固定边界的网格参数化方法. 记录自己的实现过程,一方面可能对其他人有用,另一方面自己保存. 1.首先实现固定边界的网格参数化方法,参考如下论文 M. Floater. Parameterizatio ...

  8. 表格-固定列 固定行

    当一个表格展示的数据相当多的时候,经常会用到固定列,固定行的事情 原理 是 两个或者多个表格组合行程 固定行或者固定列的情况 ,为了保障样式的统一性 当固定行的时候,要限定宽 当固定列的时候,要限定高 ...

  9. java填空题 在非静态成员方法中_成本加成定价法的优点有

    [单选题]以下Math类的方法中,-4.4通过哪个方法运算后,结果为-5.0? [填空题]以下程序的输出结果为? [单选题]下列方法定义中,正确的是() [判断题]Java 中被 final 关键字修 ...

最新文章

  1. 搭建基于Spring Cloud的微服务应用
  2. oracle学习笔记(二)------函数
  3. JAVA实现HTTPserver端
  4. Allegro如何导出生产文件
  5. OpenCV:简单计算曲线弧度-弓形弧度
  6. 1285B. Just Eat It
  7. 八、pink老师的学习笔记—— CSS用户界面样式(鼠标样式、轮廓线、防止拖拽文本域)
  8. ssrf漏洞 php,DokuWiki fetch.php SSRF漏洞与tok安全验证绕过分析
  9. Spring Boot 模板引擎FreeMarker集成
  10. python直接取系统的时间_用Python在Linux中获得系统正常运行时间的最快方法
  11. Java源码阅读神器之Translation翻译插件
  12. OpenCV 禁止吸烟图像拼接
  13. 奥西400服务器维修,奥西tds400驱动
  14. python youtube api_使用youtube v3 API从youtube播放列表检索所有视频
  15. android calendar 24小时制,Android 使用SimpleDateFormat以及Calendar转换时间为12小时制和24小时制时间格式...
  16. Web安全防攻(渗透测试)
  17. 显示远程计算机或设备将不接受连接的解决办法
  18. HDU 2197 本源串
  19. Android 内存溢出、垃圾回收、四种引用
  20. Python爬虫工具之Selenium

热门文章

  1. SAE J4002-2022 H-Point Machine (HPM-II) Specifications and Procedure for H-Point Determination - Au
  2. Java(Swing)代码实现选择截屏
  3. 7-4 猴子吃桃问题 (15分)
  4. 【基础知识】CRC(循环冗余校验)直接计算和查表法
  5. Canvas绘制曲线
  6. android虹软人脸识别简书,基于虹软人脸识别API和Qt5的人脸识别
  7. 【Vue框架】Vue绑定样式及案例之行内样式——对象绑定样式与数组控制样式(附带源码案例)
  8. 多位点序列分型_多位点序列分型(MLST)在艾伯特埃希菌鉴定中的应用
  9. jmeter的java请求(socket接口)
  10. Nature子刊 | 重大突破:解码你的内心表达