1、awk简介
- awk可以读取输入文件、为数据排序、处理数据,对输入执行计算以及生成报表
- awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文件文件中的信息。
- grep、awk、sed三者之间区别,以MySQL的语句为例:
Grep 数据查找定位 =》 select * from table
Awk 数据切片 =》 select field from table
Sed 数据修改 =》 update table set field = new where field=old
2、awk工作流程
- 读输入文件之前执行的代码段(关键字:BEGIN)
- 主循环执行输入文件的代码段。
- 读输入文件之后的代码段(关键字:END)
- 命令结构:
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
3、基础命令
awk '条件1 {动作1} 条件2 {动作2}...' 文件名
条件:一般使用关系表达式作为条件
x > 10 判断变量x是否大于10
x >= 10 大于等于10
x <= 10 小于等于10
动作:
格式化输出
流程控制语言
示例1:读取文档中的第一列和第二列
[root@rainbow ylxtest]# cat student.txt
ID NAME chengji
1 ZhanSan 90
2 LiSi 88
3 WangWu 79
[root@rainbow ylxtest]# awk '{printf $1 "\t" $3"\n"}' student.txt
ID chengji
1 90
2 88
3 79
示例2:需求截取df -h /dev/vda1中第5列的数字,数字后面不需要任何单位
df -h |grep vda1 | awk '{printf $5 "\n"}' | cut -d "%" -f 1
18
4、awk内置变量
变量名 | 属性 |
---|---|
$0 | 当前记录 |
$1~$n | 当前记录的第n个字段 |
FS | 输入字段分隔符,默认是tab |
RS | 输入记录分隔符,默认为换行符 |
NF | 当前记录中的字段个数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始 |
OFS | 输出字段分隔符 默认是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
(1) 示例:截取以“ : “分割的内容
awk '{FS=":"}{printf $1 "\t" $3 "\n"}' /etc/passwd
[root@rainbow ylxtest]# awk ‘{FS=":"}{print $1}’ /etc/passwd
root❌0:0:root:/root:/bin/bash
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
问题:
上面的命令第一行执行错误,修改命令如下即可解决
awk 'BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}' /etc/passwd