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


未完待续!!!