目录
前言
Awk是一个功能强大的编辑工具,用于在linux/UNIX下对文本和数据进行处理。数据可以来自一个或多个文件,也可以为其他命令的输出,常作为脚本来使用。
一、awk概述
AwK是一种处理文本文件的语言,是一个强大的文本分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作数据可以来自标准输入也可以是管道或文件。20世纪70年代诞生于贝尔实验室,现在centos7用的是gawk
二、awk工作原理
当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出,如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次
逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个""字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中可以使用关系运算符作为“条件”,用于比较数字与字符串,运算符有大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(!=);也可以使用逻辑操作符"&"表示"与、"||"表示"或"、"!"表示非",还可以进行简单的数学运算,如+、一、*、l、%、^分别表示加、减、乘、除、取余和乘方。
三、命令格式
awk选项 '模式或条件 {操作}' 文件1 文件2 ...
awk -f 脚本文件 文件1 文件2 ...
格式: awk关键字 选项 命令部分 '{xxxx}' 文件名
在awk语句中,模式部分决定何时对数据进行操作,若省略则后续动作时刻保持执行状态,模式可以为条件语句、复合语句或正则表达式等。每条编辑指令可以包含多条语句,多条语句之间要使用分号或空格分隔的多个{}区域。常用选项-F定义字段分隔符,默认以空格或者制表符作为分隔符。
Awk提供了很多内置变量,经常用于处理文本,了解这些内置变量的使用很有必要。
内置变量 | 描述 |
FS | 指定每行文本的字段分隔符,默认为空格或制表位。 |
NF | 当前处理的行的字段个数。 |
NR | 当前处理的行的行号(序数) |
$0 | 当前处理的行的整行内容。 |
$n | 当前处理行的第n个字段(第n列)。 |
FILENAME | 被处理的文件名。 |
RS | 行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是'\n' |
四、案例
1、打印文本内容
2、按字段输出文本
3、处理命令输出的结果
五、Awk应用案例
总结
在执行操作时,Awk逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,对比改行是否与给定的模式相匹配,并按模式或者条件执行编辑命令,也可以从脚本中调用编辑指令过滤输出相应内容。
Awk适合对文本进行抽取处理,Sed更加适合对文本进行编辑操作。