AWK工做原理正则表达式
1.awk使用行做为输入,并将这一行赋给内部变量 $0 每⼀行也可称为一个记录,以换行符结束。dom
2.awk进行字段分解,每一个字段存储在已编号的变量中,从 $1 开始ide
3.awk默认状况下的分隔符是空格, 是由内部变量 FS 来肯定字段分隔符。初始 FS 为空格函数
4.awk打印字段,将以设置的方法使用 print 函数打印spa
5.awk在打印的字段间加上空格,由于 $1,$3 之间有一个逗号。逗号它映射为另外一个内部变量,称为输出字段分隔符 OFS 默认为空格it
6.awk输出以后,将从文件中获取另⼀行,并将其存储在 $0 中,覆盖原来的内容,而后将新的字符串分隔成字段并进行处理。该过程将持续到全部行处理完毕class
AWK用法awk
一、使用AWK匹配关键字
变量
awk '/关键字或正则表达式/' filename 原理
[root@localhost ~]# awk '/[al1]/' /etc/hosts 输出含有a或l或1的行
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
awk '//' filename 会输出全部的行
二、使用AWK进行print动做
awk -F ':' '{print $1}' filename
[root@localhost ~]# awk -F ':' '{print $1}' /etc/passwd 以:为字段分隔符,输出第一个字段
三、使用AWK执行匹配+print动做
awk -F ':' '/root/ {print $1,$3}' /etc/passwd 在文件中匹配含有root的行,并打印第一和第三个字段
AWK内部变量
NR行号
[root@Shell ~]# awk '{print NR,$0}' /etc/passwd #打印整个文本的行号
[root@Shell ~]# awk 'NR<=3' /etc/passwd #打印文件的前三行
NF最后一行
[root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd #打印每行的最后一个字段
FS 指定字段分割符,默认空格
OFS 输出字段分隔符
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="+++"} /^root/ {print $1,$2}' /etc/passwd #指定分隔符为:并用+++隔开输出的字段
root+++x
RS 输入记录分隔符,默认为换行符
[root@Shell ~]# awk -F: 'BEGIN{RS=" "} {print $0}' /etc/hosts
未完待续!!!