linux awk命令介绍

通常来说 我们使用grep即可满足我们大多数的需求了,但是还是有一些情况,grep是解决不了问题的,如我们的日志中有服务的响应时间,想过滤出响应时间超过200ms掉日志,这时候用grep就很难做到了。所以,很多时候我们还会使用到awk命令,awk命令是一个功能十分强大的命令,学会awk命令对我们解决问题有很大帮助。说到这里可能有人会想到sed命令,sed命令常常作用于一整行的处理,awk则比较倾向于将一行分成数个字段来处理,目前我遇到的情况还是awk使用的频率要高很多。

一.语法:awk '条件类型1 {动作1} 条件类型2 {动作2}...' filename

awk后面接两个单引号并加上大括号{}来设置想要对数据进行的处理动作。awk可以处理后续接的文件,也可以读取来自前个命令的输入。awk主要是处理每一行的字段内的数据,而默认的字段的分隔符为空格键或[tab]键。

二.使用介绍

举例:9#7#0#0#0#0#127.0.0.1#KBIH8I09CJK09BN89HILIBHKKXZV8OU##-1#null#4.9#null#null#0befb78b1527676906653这里我想取出文件名为test.log中的ip 127.0.0.1的话 可以使用awk -F '#' '{print $7}' test.log 这里的 -F ‘#’表示将这个字符串按照#分隔 如果不使用-F 则使用默认空格符分隔 分隔后打印第7条 这里如果是$0表示整行 所以具体分隔内容是从1开始,如果我们想取出第二个数字 这里是7 大于200的情况 可以使用awk -F '#' '{(if($2==7) {print $0})}',这样如果日志中存在第二个数字等于7的时候 就打印整行日志

三.awk的处理流程是 
1.读入第一行,并将第一行的数据填入$0,$1,$2等变量中
2.依据条件类型的限制,判断是否需要进行后面的动作
3.做完所有的动作与条件类型
4.若还有后续的"行"的数据,则重复1-3步骤,直到所有数据都处理完
四.awk中的内置变量
NF 每一行拥有的字段综述
NR 目前awk处理的是第几行数据
FS 目前的分隔字符 默认是空格键
五.awk的逻辑运算符
逻辑运算符主要包括 > < >= <= == != 很好理解,不做说明了 主要是==需要注意下
六.注意事项
1.所有awk的动作,即在{}内的动作,如果有需要多个命令辅助时,可利用';'间隔,或者直接以回车键隔开每个命令
2.逻辑运算中,等号需要使用==两个等号
3.格式化输出时,在printf的格式设置当中,务必加上\n,才能进行分行
4.与bash,shell的变量不同,awk中的变量可以直接使用,不需要加$符号

除此之外,awk还支持循环计算,感兴趣的可以学习下。

参考:鸟哥的私房菜

你可能感兴趣的:(linux awk命令介绍)