概述
- awk编程语言/数据处理引擎
- 创造者:Aho,Weinberger,Kernighan
- 基于模式匹配检测输入文本,逐行处理并输出
- 通常用在Shell脚本中,获取指定的数据
- 单独用时,可对文本数据做统计
语法格式
主要用法
- 格式1:前置命令|awk [选项] '[条件]{指令}' 多条语句可以分号分隔
- 格式2:awk[选项] '[条件]{指令}' 文件.. ..
[root@zabbix-server day5]# more test.txt
Hello the world!
Welcome to beijing
#读取test.txt 第一行1列和第3列再打印,再继续读取下一行
[root@zabbix-server day5]# awk '{print $1,$3}' test.txt
Hello world!
Welcome beijing
- 常用选项:-F可以指定分隔符,默认分隔符为(空格或Tab键)
[root@zabbix-server day5]# awk -F: '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
awk内置变量
- 内置变量都有特殊含义,可以直接使用
[root@zabbix-server day5]# cat test.txt
Hello the world!
Welcome to beijing
#统计当前字段行的列数
[root@zabbix-server day5]# awk '{print NF}' test.txt
3
3
#打印倒数第3列
[root@zabbix-server day5]# awk '{print $(NF-2)}' test.txt
Hello
Welcome
#打印倒数第1列
[root@zabbix-server day5]# awk '{print $(NF-0)}' test.txt
world!
beijing
#NR统计行号
[root@zabbix-server day5]# awk '{print NR}' test.txt
1
2
#统计列数
[root@zabbix-server day5]# awk '{print NF}' test.txt
3
3[root@zabbix-server day5]# awk -F: '{print NF}' test.txt
1
1
[root@zabbix-server day5]# awk -F: '{print NR}' test.txt
1
2
[root@zabbix-server day5]# more test.txt
Hello world!
Welcome to beijing
Let me check it.
#打印每行的最后一列
[root@zabbix-server day5]# awk '{print $NF}' test.txt
world!
beijing
it.
#打印每行倒数第2列
[root@zabbix-server day5]# awk '{print $(NF-1)}' test.txt
Hello
to
check
#打印没每行行号(NR),与每行的列数(NF),以冒号(-F:)为分隔符
[root@zabbix-server day5]# awk -F: '{print NR,NF}' /etc/passwd
1 7
2 7
3 7
#打印最后一列
[root@zabbix-server day5]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
#打印常量需引号
[root@zabbix-server day5]# awk -F: '"用户名:",$1,"解释器:",$7.:",$7}' /etc/passwd
用户名: root 解释器: /bin/bash
用户名: bin 解释器: /sbin/nologin
用户名: daemon 解释器: /sbin/nologin
awk过滤的时机
[root@zabbix-server day5]# awk 'BEGIN {a=34;print a+12}'
46
[root@zabbix-server day5]# awk 'BEGIN{x=0}/\<bash$/{x++}END{print x}' /etc/passwd
2
[root@zabbix-server day5]# awk -F: 'BEGIN{print NR}END{print NR}' /etc/passwd
0
49