Tips--利用shell脚本批量提取txt文件中任意字段
利用shell脚本批量提取txt文件中任意字段
- 前言
- 0. 一个例子
- 1. cat命令
- 2. '|'符号与‘>’符号
- 3. grep命令
- 4. awk命令
前言
对于测试中出现的log,我们经常需要提取其中的关键信息进行分析,之前我通常使用python的工具来处理一些字符串,但是效率不是很高。现在通过shell脚本的方法会极大的增加效率,一句话就可以在任意的txt文本中提取到我们想要的字段,下面我们来看一下这个神奇的工具。
0. 一个例子
假如我们要从下面这段txt格式的log中提取‘sequence’后面的数据以及‘alpha’后面的数据,我们仅通过一句怎么来实现这个功能呢?
02-11 10:30:56.062 1512 1512 D OplusLayer: setAlpha sequence=6092, alpha=1.000000, name=Surface(name=5213b6f InputMethod)/@0x45bb15a - animation-leash of insets_animation#0
02-11 10:30:56.062 1512 1512 D OplusLayer: setAlpha sequence=6145, alpha=4.000000, name=Surface(name=5213b6f InputMethod)/@0x45bb15a - animation-leash of insets_animation#0
02-11 10:30:56.062 4132 4363 D OplusFastRecovery: network netid not match!! null,103
02-11 10:30:56.063 1512 1512 D OplusMovieIdle: updateLayerStacks,mOmiSupport is not supoort
我们只需要以下命令就可以得到我们想要的数据:
cat old.log | grep "setAlpha" | awk -F: '{ print $4}' | awk -F, '{ print $1"="$2 }' | awk -F= '{ print $2 "," $4 }'> new.log
这句命令乍一看比较复杂,但是实际上逻辑很简单,我们来一步步解析这条指令是怎么实现的。
1. cat命令
cat old.log
cat命令是常用的shell命令,此处的作用就是打开文件名为“old.log”的文件,并准备进行编辑。这个文件也可以是‘.txt’格式结尾的。
2. '|'符号与‘>’符号
shell命令中,‘|’符号表示的是管道。假设输入了如下指令:command0 | command1,则command0的输出流入到command1中。在我们的指令中,‘|’负责把上一句执行的输出当作输入流入到下一句。
‘>’符号在本文指令中的作用是重定向到文本, cat指令将文本打开,然后通过’|‘符号流入到后续的语句进行处理,处理完之后通过’>'将处理之后的结果存放在指定文本中。
3. grep命令
grep指令常用于搜索文本文件中是否含有某些特定模式的字符串。该命令以行为单位读取文本并使用正则表达式进行匹配,匹配成功后打印出该行文本。
grep命令记住两点,第一,它用来匹配文本中的字符串,第二,以行为单位读取,也就是说,如果文本中国一行含有目标字符串,grep就将整行打印出来。我们指令中的grep用法为:
grep "setAlpha"
我们在终端输入命令(需要将终端定位到文件路径下):
cat old.log | grep "setAlpha"
运行结果为:
可以看到,这句命令将含有“setAlpha”字符串的语句成行地打印了出来,对于log中比较多地数据,我们可以将结果保存在新的文件中:
cat old.log | grep "setAlpha" > new.log
运行完毕之后,会出现一个‘new.log’文件,打开我们就可以看到和之前终端显示一样的内容:
4. awk命令
AWK 是一种处理文本文件的语言,处理文本非常方便,熟悉python的同学可以把它当作python中的split()函数,它的作用就是根据指定字符来对文本进行分割并生成列表。
举个例子:
cat old.log | grep "setAlpha" | awk -F: '{ print $4}'
这句话的意思就是,awk语句根据前面生成的文本,以‘-F’后面的符号,即‘:’(冒号)为分界点进行分割,然后将分割后的第四个元素打印出来(即‘print $4’),运行结果为:
这样我们可以初步提取到包含我们想要信息的数据,后面可以根据该输出进一步处理文本:
cat old.log | grep "setAlpha" | awk -F: '{ print $4}' | awk -F, '{ print $1"="$2 }'
上面语句的含义就是将文本以‘,’(逗号)为分界点就行分割,并且打印第1个和第2个元素,两个元素中间用‘=’符号连接。运行结果为:
现在的结果越来越接近我们想要的了,然后我们根据这一结果进一步处理:
cat old.log | grep "setAlpha" | awk -F: '{ print $4}' | awk -F, '{ print $1"="$2 }' | awk -F= '{ print $2 "," $4 }'
我们根据上一步的结果以‘=’为分界点进行分割,然后打印第2个与第4个元素,两个元素之间用“,”连接,运行结果为:
可以看到通过我们之前一系列步骤的处理,我们想要的数据已经呈现出来了,对于数据量比较大的文本,我们可以将最终的结果存储到一个文件中:
cat old.log | grep "setAlpha" | awk -F: '{ print $4}' | awk -F, '{ print $1"="$2 }' | awk -F= '{ print $2 "," $4 }' > new.log
我们打开new.log文件发现我们的结果已经在里面了:
掌握这个命令的逻辑之后,我们就可以从海量的数据中批量提取具有一定规则的字段。
Tips--利用shell脚本批量提取txt文件中任意字段相关推荐
- python批量提取pdf的数据_Python批量提取PDF文件中文本的脚本
本文实例为大家分享了Python批量提取PDF文件中文本的具体代码,供大家参考,具体内容如下 首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import ...
- Python工具源码,Python批量提取PPT文件中的图片
在办公场景当中,同样也有这样一个需求,那就是快速批量把PPT文件中的图片提取出来,毕竟一个个点击另存为太过于繁琐,以及耗费时间,前面本渣渣分享过如何应用Python批量提取PDF文件中的图片,而这一篇 ...
- python读json文件中不同的数据类型_怎么使用python提取json文件中的字段
python中为什么用json有什么作用 python的json模块中如何将变量添加到里面 python的json模块第一个是要打开的文件,第二个是打开的操作,为什么会如果你早认清你在别人心中没那么重 ...
- Python脚本工具,PyMuPDF批量提取PDF文件中的图片
如何批量快速提取出PDF中的图片文件,你是否遇到这样的一个问题,尤其是PPT文件转换为PDF文件,需要快速提取其中的图片文件,如果你恰好会那么一点py,同时复制粘贴没问题的话,那么相信你也能够很轻松的 ...
- 使用python批量修改txt文件中的信息
使用python批量修改txt文件 在更改深度学习很多标签文件的时候,我们有时候需要自己修改txt文件里的路径,这时候如果写一个python程序,就会比较容易: import os import ra ...
- 利用shell脚本批量判断目标ip存活情况
一.目的 有时候需要批量去判断目标ip是否存活,一个一个去试多麻烦所以写了个shell脚本去批量尝试,原理使用的是去ping目标ip,虽然这种方法受很多因素影响,比如网速,防火墙禁ping等,但是也是 ...
- 利用shell脚本批量提交网站404死链给百度
网站运营人员对于死链这个概念一定不陌生,网站的一些数据删除或页面改版等都容易制造死链,影响用户体验不说,过多的死链还会影响到网站的整体权重或排名. 百度站长平台提供的死链提交工具,可将网站存在的死链( ...
- linux读取一行数据命令,Shell脚本一次读取文件中一行的2种写法
写法一: #!/bin/bash while read line do echo $line #这里可根据实际用途变化 done < urfile 写法二: #!/bin/bash ca ...
- [linux] shell脚本编程-统计日志文件中的设备号发通知邮件
1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|gr ...
最新文章
- eclipse静态部署tomcat
- 架构师之路 — 部署架构 — 集群部署
- java tif格式图片_java给tif格式图片加文字水印?
- Jquery中如何获取元素的文本,值,属性和内容
- 阿里云官方网站免费套餐怎么抢
- LeetCode 992. K 个不同整数的子数组(双指针)
- PowerDesigner连接mysql逆向生成pdm
- PowerShell 方式部署Sharepoint Solution
- C++中关于指针入门的最好的文章
- 字节跳动 测试开发面经
- 数据库系统的体系结构
- 数据分析进阶 - 评分模型权重计算方法
- java中string的方法_Java中String常用方法
- 51单片机前言知识总结
- 好程序员大数据培训之Hadoop常见问题
- 【Ubuntu16.04】搭建Hyperledger Fabric环境
- symbian程序的前台运行和后台运行
- 教你编写DOTA外挂
- svn: E155019: Can't upgrade as it is not a pre-1.7 work解决办法
- 服务器启动显示防火墙,宝塔面板防火墙怎么打开