今日推荐:shell 三剑客之文本处置惩罚工具awk【欧宝体育,欧宝官方体育app下载,欧宝体育官网在线入口,欧宝体育最新官网登录入口】
日期:2023-01-12 00:16:01 | 人气: 2224

配景awk 是一个文本处置惩罚工具,通常用于处置惩罚数据并生成效果陈诉。awk 的命名是它的首创人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母组成的。awk 实质上是一门编程语言,其具备自己的语法,如:条件判断、循环等等。
在许多方面类似 shell 编程语言。在测试事情中,我们可以使用它来资助我们提升测试效率,好比:分析日志,花样化统计效果等等。awk 语法花样awk [option] 'pattern{action}' filenameaction接下来我们来学习最简朴的 action-printroot@lemonban:/home/test# cat hello.txthello lemonTester Developer Java Python逐行打印每行内容,$0 是 awk 的内置变量,效果是打印整行内容root@lemonban:/home/test# awk '{print $0}' hello.txthello lemonTester Developer Java Python每行以空格为分开,逐行打印出第一列内容root@lemonban:/home/test# awk '{print $1}' hello.txthelloTesterJava每行以空格为分开,逐行打印出第一列 第二列 内容root@lemonban:/home/test# awk '{print $1,$2}' hello.txthello lemon Tester Developer Java Pythonaction 是被{}包裹的内容awk 的事情模式是逐行以指定的分开符将行分成多个字段,上述的例子没有指定分开符,那么将会以默认的分开符空格举行支解,每一个支解的字段划分对应着 awk 的内置变量 $1,$2...,其中 $0 是代表整行内容。awk 内置变量除了 $0,$1,$2...之外,awk 另有许多内置变量,下表中是常用的 awk 内置变量:$0整行内容$1-$n当前行的第 1-n 个字段NF当前行的字段个数,也就是有几多列NR当前行的行号,从 1 开始计数FNR多文件处置惩罚时,每个文件行号单独计数,都是从 0 开始FS输入字段分开符,不指定默认以空格或 tab 键支解RS输入行分开符,默认回车换行OFS输出字段分开符,默认为空格ORS输出行分开符,默认为回车换行NR,NF 输出root@lemonban:/home/test# awk '{print NR,NF}' hello.txt1 22 23 2如果不想以默认的空格作为字段分开符,那么我们可以通过 FS 内置变量指定新的分开符文件内容更改如下:root@lemonban:/home/test# cat hello.txthello|lemonTester|Developer Java|Python指定"|"为新的分开符,其中-v 参数表现指定输入分开符(即在处置惩罚文件之前):root@lemonban:/home/test# awk -v FS='|' '{print $1,$2}' hello.txthello lemonTester Developer Java Python默认输出分开符也是空格,可以指定-v OFS 改变输出分开符root@lemonban:/home/test# awk -v FS='|' -v OFS='::' '{print $1,$2}' hello.txthello::lemonTester::Developer Java::Pythonpattern 模式上面我们学习到了 option 参数中的-v 参数以及 action 中的 print 行动,pattern 有何用处呢?当 awk 举行逐行处置惩罚的时候,pattern 作为条件去判断将要被处置惩罚的行是否满足条件,如果满足则处置惩罚,否则不处置惩罚。
需要注意的是 action 是一定会被{}包裹的,而 pattern 则没有被{}包裹着的空模式默认 pattern 为空模式,好比上述的:awk '{print $1}' testfile文本中的每一行,都满足条件,都市执行相应的操作BEGIN/END 模式在开始逐行处置惩罚文本之前,先执行 BEGIN 模式所指定的行动,一般我们将其用于表头awk 'BEGIN{print “hello”,”lemonban”}'在所有文本处置惩罚完毕之后,执行 END 模式所指定的行动,一般用于末尾说明awk 'BEGIN{print “hello”,”lemonban”}{print $1,$2}END{print “end of file”}'示例:root@lemonban:/home/test# awk 'BEGIN{print "name","age"}{print $1,$2}END{print "no more data"}' hello.txtname agezhangsan 25lisi 30wangwu 28nomoredata正则模式使用语法:awk '/正则表达式/{action}' filename其中,正则表达式需要通过//包裹起来示例:查找 passwd 中以 MySQL 开头的信息root@lemonban:/home/test# awk '/^mysql/{print $0}' /etc/passwdmysql:x:105:114:MySQL Server,,,:/nonexistent:/bin/false联合-v 参数指定输入分开符为":"root@lemonban:/home/test# awk -v FS=':' '/^mysql/{print $1,$2}' /etc/passwdmysql x需要注意的是如果正则表达式中有斜杠"/",那么需要举行转义:root@lemonban:/home/test# awk '/\/bin\/bash$/{print $0}' /etc/passwdroot:x:0:0:root:/root:/bin/bash上述表达式是查找以/bin/bash 竣事对应行的信息比力表达式模式所谓比力表达式是指有关系运算符到场运算,好比 >,<,>=,<= 等等示例:查找 2 行以后所有行的内容root@lemonban:/home/test# awk 'NR>2{print $0}' hello.txtwangwu 28查找字段最后一个是 30 所在行内容root@lemonban:/home/test# awk '$NF==30{print $0}' hello.txtlisi 30这里的 NF 表现所在行字段个数,$NF 即表现所在行最后一个字段。总结本篇文章给大家先容了 awk 的基本语法及 action、pattern、option 的使用。awk 作为强大的编程工具,由于文章篇幅有限 awk 另有更多的特性没有先容,大家如果感兴趣可以自行查阅相关资料学习。本文作者:柠檬班软件测试(lemonban)——专注于最新最前沿的软件测试技术,解决你的测试技术烦恼,对软件测试感兴趣的朋侪赶忙关注我们吧!。
本文关键词:欧宝体育,欧宝官方体育app下载,欧宝体育官网在线入口,欧宝体育最新官网登录入口
本文来源:欧宝体育,欧宝官方体育app下载,欧宝体育官网在线入口,欧宝体育最新官网登录入口-www.gxjueqiad.com