跳到主要内容

[toc]

awk文本处理、语法、工作原理

1.awk文本处理

  • 1.逐行扫描文件(或流), 从第一行到最后一行

  • 2.寻找匹配的特定模式的行,在行上进行操作

  • 3.如果没有指定处理动作,则把匹配的行显示到标准输出

  • 4.如果没有指定模式,则所有被操作的行都被处理

2.awk语法格式及重要选项

2.1 语法格式

awk option 'pattern {action}' file

awk 选项 ‘匹配模式 {动作}’ 文件

  • pattern 匹配模式

  • action 处理动作,针对符合匹配模式的数据进行的处理动作,如果没有pattern,只有action,会对所有文本执行action的处理动作,如果没有action,只有pattern,会打印出符合匹配模式的行

2.2 两个重要选项

2.2.1 -F 指定字段分隔符

示例:取出IP地址

-F指定分隔符是连续的空格冒号(centos6.9)

#centos6.9
ifconfig eth0 |awk -F'[ :]+' 'NR==2{print $4}'

#centos7.5
ifconfig eth0|awk -F'[ ]+' 'NR==2{print $3}'

2.2.2 -v 创建或修改awk中的变量

#创建一个变量并输出,只在awk中生效,且awk中输出变量不需要加$符号
[root@test1 ~]# awk -v n1=10 -v n2=20 'BEGIN{print n1,n2}'
10 20

一个-v选项输出多个变量,注意-v后边必须与大括号紧挨
awk -v{a=10,b=20} 'BEGIN{print a,b}'
10 20

3.awk工作原理

版本一

1.awk将文件中的每一行作为输入, 并将每一行赋给内部变量$0, 以换行符结束
2.awk开始进行字段分解,每个字段存储在已编号的变量中,从$1开始[默认空格分割]
3.awk默认字段分隔符是由内部FS变量来确定, 可以使用-F修订
4.awk行处理时使用了print函数打印分割后的字段
5.awk在打印后的字段加上空格,因为$1,$3 之间有一个逗号。逗号被映射至OFS内部变量中,称为输出字段分隔符, OFS默认为空格.
6.awk输出之后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕.

版本二

1.先执行命令行的参数
2.如果有BEGIN{},就执行其中的内容 此时awk还没有开始读取文件内容
3.BEGIN{}执行完后读取文件内容
.判断是否满足条件
.符合,执行命令
.不符合,读取下一行
4.文件内容读取完成后,最后执行END{}中的内容