AWK是一种处理文本文件的语言,是一个强大的文件分析工具。 它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,统计汇总等工作,数据可以来自标准输入也可以是管道或文件。 工作原理:: 当读到第一行时,匹配条件,然后执行指定动作,在接着读取第二行数据处理,不会默认输出。 如果没有定义匹配条件,则是默认匹配所有数据行,awk隐含循环,条件匹配多少次,动作就会执行多少次。 逐行读取文本,默认以空格或tab键为分割符进行分割,将分割所得的各个字段,保存到内建变量中,并按模式或或条件执行编辑命令。

1. 语法

awk [参数] [处理规则] [操作对象]

1.1. 参数

-F : 指定文本分隔符 (本身默认是以空格作为分隔符

1.2. 处理规则

1. BEGIN{} : 最开始执行
2. //       : 正则及匹配
3. {}       : 循环体
4. END{}    : 最后执行

2. 生命周期

grep,sed和awk都是读一行处理一行,直到处理完成

  1. 接收一行作为输入

  2. 把刚刚读入进来得到文本进行分解

  3. 使用处理规则处理文本

  4. 输入一行,赋值给$0,直至处理完成

  5. 把处理完成之后的所有数据交给END{}来再次处理

3. 内置变量

内置变量

功能

NF

当前处理的行的字段个数(就是:有多少列)

NR

当前处理的行的行号(就是:有多少行)

FNR

读取文件的记录数(行号),从1开始,新的文件重新从1开始计数

$0

当前处理的行的整行内容(就是:表示一行的内容)

$n

当前处理行的第n个字段(就是:第n列)

FILENAME

被处理的文件名

FS

指定每行的字段分隔符,默认为空格或制表位(相当于选项 -F )

OFS

输出字段的分隔符,默认也是空格

RS

行分割符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录,而awk一次仅读取一条记录,预设值是“\n“

ORS

输出分割符,默认也是换行符

4. 函数

print   : 打印
printf  : 格式化打印
%s      : 字符串
%d      : 数字
-       : 左对齐
+       : 右对齐
15      : 至少占用15字符

5. 匹配表达式

>       : 小于
<       : 大于
>=      : 小于等于
<=      : 大于等于
~       : 正则匹配(包含)
!~      : 正则匹配(不包含)
&&      : 逻辑与
||      : 逻辑或
!       : 逻辑非
+       : 加
-       : 减
*		: 乘
/		: 除
%		: 求余

6. 流程控制

if 使用格式:
if(){}                 : 单分支
if(){}else{}           : 双分支
if(){}else if(){}else{} : 多分支