背景

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相关推荐

  1. shell编程之文本处理工具awk

    shell编程之文本处理工具awk 文章目录 shell编程之文本处理工具awk 一.awk介绍 1. awk概述 2. awk能干啥? 二.awk使用方式 1. ==命令行模式使用== ㈠ 语法结构 ...

  2. 《Shell脚本学习指南》第四章 文本处理工具

    4.1 排序文本 4.1.1 行的排序 未提供命令行选项时,整个记录会根据当前locale所定义的次序排序. 在传统的C locale中,也就是ASCII顺序. 4.1.2 以字段排序 -k选项的后面 ...

  3. 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 ...

  4. 学习Shell的经典好书推荐

    学习Shell的经典好书推荐 Shell是系统管理员必备的利器,我们去学习他有哪些好书呢?今天我就来推荐一些. <UNIX Shells by Example Fourth Edition> ...

  5. 推荐8个良心安全测试工具,快来取走

    安全测试是很重要的东西!!可以提高信息系统中的数据安全性,未经批准的用户就无法访问.成功的安全测试可以保护Web应用程序免受严重的恶意软件和其他恶意威胁的侵害,这些侵害会导致Web应用程序崩溃或产生意 ...

  6. linux 【完结篇】第六章 shell编程及自动化运维--三剑客

    linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...

  7. shell编程系列15--文本处理三剑客之awk格式化输出printf

    shell编程系列15--文本处理三剑客之awk格式化输出printfprintf的格式说明符格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o 打印 ...

  8. 监控mysql的shell脚本_监控MySQL主从状态的shell脚本

    分享一个Linux下,监控MySQL主从状态及配合企业微信机器人报警的Shell脚本 SLAVE_IP:为监控的主机IP USER:为msyql用户 PASSWORD:为mysql密码 WHEREIS ...

  9. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项awk选项总结选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号[root@localhost shel ...

最新文章

  1. webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序
  2. 详解SpringBoot应用跨域访问解决方案
  3. 126. 最大的和【思维 前缀和】
  4. Maximum XOR Sum 系列问题
  5. [笔记]Go语言写文件几种方式性能对比
  6. 【平面设计】扁平化设计(Ⅲ)——原则
  7. 向真正Java高手请教ant构建工具的类装载器问题
  8. Atitit 标记语言ML(Markup Language) v6 目录 1. 标记语言ML Markup Language 1 1.1. 简介 1 2. 置标语言置标语言通常可以分为三类:标识性的
  9. 手机上最好用的五笔输入法_手机输入法之争:九宫格和全键盘到底哪个更好用...
  10. 编程语言:8086汇编中int 16h接收alt+方向键
  11. Foxmail发送邮件,发送邮件工具类
  12. android win7 共享网络打印机,详解win7共享打印机如何设置
  13. 人力资源管理专业知识与实务(初级)【6】
  14. JS匀速运动案例01
  15. python进程间通信时间开销_python 进程间的通信
  16. APP产品经理(一)
  17. 搞一下 车载以太网实战 | 01 车载以太网帧结构详解
  18. RobotFramework中,选择注释套件中的某些用例的方法(主要用于RED/IntelliBot从套件执行单个用例)
  19. 常用汇编命令OD命令总结
  20. 系统杂类--------删除GHOSTwin7桌面顽固IE图标

热门文章

  1. HTML网页设计期末课程大作业~旅游住宿酒店的HTML网页设计(14页) ~学生网页设计作业源码 旅游网页代码 学生网页设计与制作期末作业下载 DW旅游网页作业代码下载
  2. 目标CPU中的“anyCPU”“x86”“x64”“Itanium”区别
  3. 极客漫画-linux合集(一)
  4. 百度团圆红包又开始了 队伍人数越多红包越大吗? 我们一起看下规则
  5. 如何查看Windows xp是32位还是64位
  6. 安全和访问控制键盘行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. POJ 2343 Airline company [DFS编号]
  8. 记录一下这些年看过的开发相关书籍
  9. 2022-2027年中国城市轨道交通智能化应用市场规模现状及投资规划建议报告
  10. 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用