awk 是一个非常优秀的数据处理工具,相较于 sed 常常作用于一整个行的处理,而 awk 则比较倾向于一行当中分成多个字段来处理。因此,awk 更适合处理小型的文本数据
1、awk 常用语法
-
直接操作文件
awk 选项 '条件类型1{动作1} 条件类型2{动作2} ...' 文件名
-
对前面命令的输出进行处理
command | awk 选项 '条件类型1{动作1} 条件类型2{动作2} ...'
-
常用选项
- -F:指明输入时用到的字段分隔符
awk 后面跟两个单引号并加上大括号 {} 来设置想要对数据进行的处理动作。awk 可以处理后续接的文件,也可以读取来自前面命令的标准输出,awk 主要是处理每一行的字段内的数据,而默认使用的字段分隔符为 “空格键” 或 “[tab]键” 。在 awk 的括号内,每一行的内容被分割成若干字段,从第一个字段开始,其变量名分别是 $1, $2… 等,$0代表整行数据
2、awk 的处理流程
-
读入第一行,并将第一行的数据填入 $0, $1, $2… 等变量中
-
根据 “条件类型” 的限制,判断是否需要进行后面的 “动作”
-
做完当前行所有的动作与条件类型
-
如果还有后续行的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止
3、awk 内置变量
变量名称 | 含义 |
---|---|
NF | 每一行 ($0) 拥有的字段总数 |
NR | 目前 awk 所处理的是第几行的数据 |
FS | 目前的分隔字符,默认是空格键 |
OFS | 输出分隔符,默认为空白字符 |
FILENAME | 当前文件名 |
4、awk常用操作
-
查看passwd文件中用户对应的shell
[root@localhost ~]# awk -F: '{print $1 "\t" $7}' /etc/passwd | head -5 root /bin/bash bin /sbin/nologin daemon /sbin/nologin adm /sbin/nologin lp /sbin/nologin # “-F:” 参数直接指定了使用冒号作为分隔符
-
从前面命令标准输出中获取指定字段
# 获取最近登录用户和对应的IP地址 ## 这里对应的就是$1,$3 [root@localhost ~]# last -5 | awk '{print $1 "\t" $3}' root 192.168.137.1 root 192.168.137.1 root 192.168.137.1 root 192.168.137.1 root 192.168.137.1
更多高级操作请参看官方文档或,man手册