一、awk基本使用方法
上一节讲了printf命令,这条命令在系统当中直接使用的几率不大。但是在awk命令当中,其标准输出命令就是printf。awk命令与cut命令的作用是一样的,截取符合条件的列,而grep是截取符合条件的行。但是也说了,cut命令也有它的局限性,要么是制表符、冒号、逗号、句号等这种规律的,不规律的就不能有效的截取。
awk本身也能有效的截取制表符、冒号、逗号这种,cut有的功能awk都有。为什么还需要cut命令呢?
awk本身是非常复杂的命令,不仅能够实现字符段的截取,还能实现编程调用(常见的如定义函数、流程判断等都可以。)所以一般把awk命令说成是awk编程。还是那句话,能用cut实现的就用cut命令,不能实现的再考虑awk。(awk默认是识别空格与制表符)
awk使用格式如下:
awk '条件1 条件2 ...' 文件名
条件(Pattern):
能识别的条件非常的多,一般使用关系表达式作为条件,比如x>10或x>=10或x
动作(Action):
格式化输出,最常见的也就是printf命令
流程控制语句,常见的如if、for等语句
说明如下:
数据处理过程:awk虽然是列提取,但是处理数据是先读第一行数据,然后把对应的数据赋给变量,$0代表整个这一行本身,$1代表第一列,以此类推。然后再来判断条件是否符合,执行动作输出对应的格式,直到数据读到最后一行的行尾才结束。
再比如awk处理df的数据,原先cut不能执行。
df -hT | grep "vda1" | awk ''
可是我最终只想要这个8,而不要这个%,怎么办?
df -hT |grep "vda1" |awk '' |cut -f 1 -d "%"
二、awk的条件BEGIN
BEGIN作用是在所有数据读取之前,执行后面的动作。
比如:
三、awk的分隔符
这里首先介绍FS内置变量,作用是指定分隔符。
比如:awk ‘BEGIN ’ /etc/passwd
四、awk的条件END
END作用是在所有数据读取之后,执行后面的动作,即{}中的内容。
五、关系运算符
比如:cat stu.txt |grep -v ID | awk '$4>=90 '
领取专属 10元无门槛券
私享最新 技术干货