shell mysql awk_今日推荐:shell 三剑客之文本处理工具awk
背景
awk 是一个文本处理工具,通常用于处理数据并生成结果报告。
awk 的命名是它的创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母组成的。
awk 实质上是一门编程语言,其具备自己的语法,如:条件判断、循环等等。在很多方面类似 shell 编程语言。
在测试工作中,我们可以利用它来帮助我们提升测试效率,比如:分析日志,格式化统计结果等等。
awk 语法格式
awk [option] 'pattern' filename
action
接下来我们来学习最简单的 action-print
root@lemonban:/home/test# cat hello.txt
hello lemon
Tester Developer
Java Python
逐行打印每行内容,$0 是 awk 的内置变量,效果是打印整行内容
root@lemonban:/home/test# awk '' hello.txt
hello lemon
Tester Developer
Java Python
每行以空格为分隔,逐行打印出第一列内容
root@lemonban:/home/test# awk '' hello.txt
hello
Tester
Java
每行以空格为分隔,逐行打印出第一列 第二列 内容
root@lemonban:/home/test# awk '' hello.txt
hello lemon
Tester Developer
Java Python
action 是被{}包裹的内容
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 '' hello.txt
1 2
2 2
3 2
如果不想以默认的空格作为字段分隔符,那么我们可以通过 FS 内置变量指定新的分隔符
文件内容更改如下:
root@lemonban:/home/test# cat hello.txt
hello|lemon
Tester|Developer
Java|Python
指定"|"为新的分隔符,其中-v 参数表示指定输入分隔符(即在处理文件之前):
root@lemonban:/home/test# awk -v FS='|' '' hello.txt
hello lemon
Tester Developer
Java Python
默认输出分隔符也是空格,可以指定-v OFS 改变输出分隔符
root@lemonban:/home/test# awk -v FS='|' -v OFS='::' '' hello.txt
hello::lemon
Tester::Developer
Java::Python
pattern 模式
上面我们学习到了 option 参数中的-v 参数以及 action 中的 print 动作,pattern 有何用处呢?
当 awk 进行逐行处理的时候,pattern 作为条件去判断将要被处理的行是否满足条件,如果满足则处理,否则不处理。
需要注意的是 action 是一定会被{}包裹的,而 pattern 则没有被{}包裹着的
空模式
默认 pattern 为空模式,比如上述的:
awk '' testfile
文本中的每一行,都满足条件,都会执行相应的操作
BEGIN/END 模式
在开始逐行处理文本之前,先执行 BEGIN 模式所指定的动作,一般我们将其用于表头
awk 'BEGIN'
在所有文本处理完毕之后,执行 END 模式所指定的动作,一般用于末尾说明
awk 'BEGINEND'
示例:
root@lemonban:/home/test# awk 'BEGINEND' hello.txt
name age
zhangsan 25
lisi 30
wangwu 28
no more data
正则模式
使用语法:
awk '/正则表达式/' filename
其中,正则表达式需要通过//包裹起来
示例:
查找 passwd 中以 MySQL 开头的信息
root@lemonban:/home/test# awk '/^mysql/' /etc/passwd
mysql:x:105:114:MySQL Server,,,:/nonexistent:/bin/false
结合-v 参数指定输入分隔符为":"
root@lemonban:/home/test# awk -v FS=':' '/^mysql/' /etc/passwd
mysql x
需要注意的是如果正则表达式中有斜杠"/",那么需要进行转义:
root@lemonban:/home/test# awk '/\/bin\/bash$/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
上述表达式是查找以/bin/bash 结束对应行的信息
比较表达式模式
所谓比较表达式是指有关系运算符参与运算,比如 >,=,
示例:查找 2 行以后所有行的内容
root@lemonban:/home/test# awk 'NR>2' hello.txt
wangwu 28
查找字段最后一个是 30 所在行内容
root@lemonban:/home/test# awk '$NF==30' hello.txt
lisi 30
这里的 NF 表示所在行字段个数,$NF 即表示所在行最后一个字段。
总结
本篇文章给大家介绍了 awk 的基本语法及 action、pattern、option 的使用。
awk 作为强大的编程工具,由于文章篇幅有限 awk 还有更多的特性没有介绍,大家如果感兴趣可以自行查阅相关资料学习。
本文作者:柠檬班软件测试(lemonban)——专注于最新最前沿的软件测试技术,解决你的测试技术烦恼,对软件测试感兴趣的朋友赶快关注我们吧!
shell mysql awk_今日推荐:shell 三剑客之文本处理工具awk相关推荐
- shell编程之文本处理工具awk
shell编程之文本处理工具awk 文章目录 shell编程之文本处理工具awk 一.awk介绍 1. awk概述 2. awk能干啥? 二.awk使用方式 1. ==命令行模式使用== ㈠ 语法结构 ...
- 《Shell脚本学习指南》第四章 文本处理工具
4.1 排序文本 4.1.1 行的排序 未提供命令行选项时,整个记录会根据当前locale所定义的次序排序. 在传统的C locale中,也就是ASCII顺序. 4.1.2 以字段排序 -k选项的后面 ...
- 2019-8-20 [Linux] 6.Shell的基本操作 查看 改变 列出 阅读开头/结尾 循环查看 阅读工具less 查找文件内容 文本分析工具AWK 文本编辑工具SED文件find 帮助man
文章目录 6.linuxShell的基本操作 6.1 查看目录和文件 6.1.1 显示当前目录:pwd 6.1.2 改变目录:cd 6.1.3 列出目录内容:ls 1) 查看列表信息 以及详细信息 2 ...
- 学习Shell的经典好书推荐
学习Shell的经典好书推荐 Shell是系统管理员必备的利器,我们去学习他有哪些好书呢?今天我就来推荐一些. <UNIX Shells by Example Fourth Edition> ...
- 推荐8个良心安全测试工具,快来取走
安全测试是很重要的东西!!可以提高信息系统中的数据安全性,未经批准的用户就无法访问.成功的安全测试可以保护Web应用程序免受严重的恶意软件和其他恶意威胁的侵害,这些侵害会导致Web应用程序崩溃或产生意 ...
- linux 【完结篇】第六章 shell编程及自动化运维--三剑客
linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...
- shell编程系列15--文本处理三剑客之awk格式化输出printf
shell编程系列15--文本处理三剑客之awk格式化输出printfprintf的格式说明符格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o 打印 ...
- 监控mysql的shell脚本_监控MySQL主从状态的shell脚本
分享一个Linux下,监控MySQL主从状态及配合企业微信机器人报警的Shell脚本 SLAVE_IP:为监控的主机IP USER:为msyql用户 PASSWORD:为mysql密码 WHEREIS ...
- shell编程系列20--文本处理三剑客之awk常用选项
shell编程系列20--文本处理三剑客之awk常用选项awk选项总结选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号[root@localhost shel ...
最新文章
- webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序
- 详解SpringBoot应用跨域访问解决方案
- 126. 最大的和【思维 前缀和】
- Maximum XOR Sum 系列问题
- [笔记]Go语言写文件几种方式性能对比
- 【平面设计】扁平化设计(Ⅲ)——原则
- 向真正Java高手请教ant构建工具的类装载器问题
- Atitit 标记语言ML(Markup Language) v6 目录 1. 标记语言ML Markup Language	1 1.1. 简介	1 2. 置标语言置标语言通常可以分为三类:标识性的
- 手机上最好用的五笔输入法_手机输入法之争:九宫格和全键盘到底哪个更好用...
- 编程语言:8086汇编中int 16h接收alt+方向键
- Foxmail发送邮件,发送邮件工具类
- android win7 共享网络打印机,详解win7共享打印机如何设置
- 人力资源管理专业知识与实务(初级)【6】
- JS匀速运动案例01
- python进程间通信时间开销_python 进程间的通信
- APP产品经理(一)
- 搞一下 车载以太网实战 | 01 车载以太网帧结构详解
- RobotFramework中,选择注释套件中的某些用例的方法(主要用于RED/IntelliBot从套件执行单个用例)
- 常用汇编命令OD命令总结
- 系统杂类--------删除GHOSTwin7桌面顽固IE图标
热门文章
- HTML网页设计期末课程大作业~旅游住宿酒店的HTML网页设计(14页) ~学生网页设计作业源码 旅游网页代码 学生网页设计与制作期末作业下载 DW旅游网页作业代码下载
- 目标CPU中的“anyCPU”“x86”“x64”“Itanium”区别
- 极客漫画-linux合集(一)
- 百度团圆红包又开始了 队伍人数越多红包越大吗? 我们一起看下规则
- 如何查看Windows xp是32位还是64位
- 安全和访问控制键盘行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- POJ 2343 Airline company [DFS编号]
- 记录一下这些年看过的开发相关书籍
- 2022-2027年中国城市轨道交通智能化应用市场规模现状及投资规划建议报告
- 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用