简介
- awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个”字段“来处理
- awk的流程是依次读取每一行数据,读取完一行数据后,进行条件判断,如果满足条件,就执行该条件对应的动作,没有条件直接执行动作
- 其中文件名为$0,剩下的每一列依次为$1\$2...,判断完一行后,继续判断下一行,直到知道文件全部判断完
- 对比cut而言,awk可以对以空格为分隔符进行操作;可以进行条件判断;另外字符截取针对有固定分隔符或者有规律的分隔符推荐使用cut命令
awk
命令格式
awk '条件1{动作1}条件2{动作2}...' 文件名
条件
- 一般使用关系表达式作为条件
- x > 10判断变量x是否大于10
- x > =10大于等于
- x <= 10小于等于
动作
- 格式化输出printf
- 流程控制语句if…do…done
例子
awk '{printf $2 "\t" $3 "\n"}' zifu1.text
例子-任务
任务:获取指定系统已用硬盘空间百分比
命令:
- df -h:查看磁盘磁盘占用空间
- df -h | grep "/dev/sda":查看/dev/sda文件系统的磁盘占用空间
- df -h | grep "/dev/sda" | awk '{print $5}':显示/dev/sda文件系统的磁盘占用空间,只显示已用那一列的数据
- df -h | grep "/dev/sda" | awk '{print $5}' | cut -d "%" -f 1:显示/dev/sda文件系统的磁盘占用空间,只显示已用那一列的数据,不要百分比,只保留数字
BEGIN
- awk动作执行前操作,第一行显示或运行
- df -h | grep "/dev/sda" | awk 'BEGIN{print "这是sda已用空间"}{print $5}'
END
- awk动作执行后的操作,最后一行显示或运行
- df -h | grep "/dev/sda" | awk 'END{print "这是sda已用空间"}{print $5}'
FS内置变量
- awk分隔符默认TAB制表符以及空格,如果我们要指定分隔符就需要用到FS内置变量
- FS内置变量放在BEGIN里面
- #例子
- cat /etc/passwd | grep /bin/bash | awk '{FS=":"}{print $1 "\t" $3}'
- cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}
关系运算符
任务:打印成绩好的学生姓名
命令:
- cat zifu1.text | grep -v "name" | awk '$4>60{print $2}'
- 或
- cat zifu1.text | grep -v "name" \ 命令太长时,用换行符下划线\,切到下一行继续写
- #> | awk '$4>70{print $2}'