AWK工作原理
1.awk使用行作为输入,并将这一行赋给内部变量 $0 每⼀行也可称为一个记录,以换行符结束。
2.awk进行字段分解,每个字段存储在已编号的变量中,从 $1 开始
3.awk默认情况下的分隔符是空格, 是由内部变量 FS 来确定字段分隔符。初始 FS 为空格
4.awk打印字段,将以设置的方法使用 print 函数打印
5.awk在打印的字段间加上空格,因为 $1,$3 之间有一个逗号。逗号它映射为另一个内部变量,称为输出字段分隔符 OFS 默认为空格
6.awk输出之后,将从文件中获取另⼀行,并将其存储在 $0 中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕
AWK用法
1、使用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 会输出所有的行
2、使用AWK进行print动作
awk -F ':' '{print $1}' filename
[root@localhost ~]# awk -F ':' '{print $1}' /etc/passwd 以:为字段分隔符,输出第一个字段
3、使用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
未完待续!!!