Shell系列(22)-字符截取命令awk
简介
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"}'
例⼦-任务
任务:获取指定系统已⽤硬盘空间百分⽐
命令:
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}
关系运算符
任务:打印成绩好的学⽣姓名
命令:
| grep -v "name" | awk '$4>60{print $2}'shell 字符串长度
| grep -v "name" \    命令太长时,⽤换⾏符下划线\,切到下⼀⾏继续写
#> | awk '$4>70{print $2}'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。