awk强大的文本&文件的处理语言
awk,一种处理文本文件的语言,强大的文本分析工具。取三位创始人Alfred Aho、Peter Weinberger和Brian Kernighan的Family Name的首字符
awk
awk,一种处理文本文件的语言,强大的文本分析工具。
取三位创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的 Family Name 的首字符。
AWK 命令非常强大,拥有很多 Option 参数,支持各类 script 命令,支持脚本文件引入与拓展,支持多种结构的写法。
与其说 AWK 命令,更像一种语言规范。
因此本文将不去详细描述各种 Option 的语法,也不会展示各种写法,为了避免混淆,毕竟大而全反而容易越学越乱。
常见用法
截取文本
#输出文本管道截取,此处输出结果即123(通过逗号分割)
grep "123,122" | awk -F, '{print $1}'
#文件文本截取
#awk默认按空格或TAB分割
#将mebugs.log中的每行数据分割,并输出分割后的第一段[列]和第二段[列]数据
awk '{print $1,$2}' mebugs.log
#-F相当于内置变量FS, 指定分割字符
#将mebugs.log中的每行数据按逗号进行分割,并输出分割后的第一段[列]和第二段[列]数据
awk -F, '{print $1,$2}' mebugs.log
awk -F 可以指定多个以及正则表达式,作为分隔的条件字符串
涉及到特殊符号需要用'' (单引号) 进行包裹分隔条件字符串替换上文中逗号即可
如果不指定默认以 TAB 制表符和空格分割
相比较直接处理文本文件,管道方案在实际工作应用更为方便和方便
赋值组合拼接
#默认以TAB制表符和空格分割
#定义a=1 b=so
#输出第一段[列]、第二段[列](1+a)、第一段[列]拼接变量b(com)的结果
#假设有一行日志 12-12 mebugs.com-POST
#本命令输出结果 12-12 mebugs.com-POST 12-12com
awk -va=1 -vb=com '{print $1,$1+a,$1b}' mebugs.log
-v 变量赋值,可以使结果具有更高的自定义效果,方便输出我们想要的结果,减少后续循环再操作的步骤
更多用法
下面这些应用会比较少,基本都是属于条件输出的范畴。
在实际的脚本编写过程中,多数我们会优先筛选出我们的数据然后进行处理。
#搜索出log中包含mebugsUser=的行,然后通过=截取,输出第二段[列]的数据(mebugsUser=的值)
#如:mebugsUser=NiuBi
#输出:NiuBi
grep "mebugsUser=" mebugs.log | awk -F'=' '{print $2}'
运算符支持处理
#过滤第一段[列]大于15的行,整行输出
awk '$1>15' mebugs.log
#过滤第一段[列]等于15的行,仅输出第一段[列]、第三段[列]数据
awk '$1==15 {print $1,$3}' mebugs.log
#过滤第一段[列]大于15并且第二段[列]于'mebugs'的行,仅输出第一段[列]、第二段[列]、第二段[列]数据
awk '$1>15 && $2=="mebugs" {print $1,$2,$3}' mebugs.log
正则条件输出
#输出mebugs.log中包含"mebugs"的行,整行输出
awk '/mebugs/' mebugs.log
#输出mebugs.log中第五段[列]包含 "mebugs",仅输出该行第二段[列]、第四段[列]数据
$ awk '$5 ~ /mebugs/ {print $2,$4}' mebugs.log
AWK 脚本引入
awk -f {awk脚本} {文件名}
关于 awk 脚本,需要注意两个关键词 BEGIN 和 END。
BEGIN {这里面放的是执行前的语句 }
END {这里面放的是处理完所有的行后要执行的语句}
{这里面放的是处理每一行时要执行的语句}
具体不进行深入讲解了,因为我也不怎么用。
大写滑稽,小写尴尬,哈哈哈~~
