awk:是一款功能非常强大的数据处理工具,是一种用于文本处理的编程语言工具,如果对其进行详细介绍,完全可以写一本书了,在此我们只是简单了解一下它的初级应用,这款工具在东莞seo的日志分析工作中是最为重要和方便的。
awk其实是早期UNIX中的文本处理工具,后来GUN做了gawk,gawk包含了awk的所有功能,现在很多地方都使用gawk代替了awk。在常见的Linux系统中,为了保留大家使用awk的习惯,系统做了一个软链接,将awk指向gawk,因此在大部分系统中使用awk其实调用的是gawk程序,在Cygwin中也不例外,因此在Cygwin中可以使用awk,也可以使用gawk,可以认为awk是gawk的一个简短的别名而已。不过在DOS下使用UnxUtils包中的命令时要使用gawk,因为在UnxUtils包中只有gawk.exe程序,系统中又没有把awk指向gawk.exe,所以在DOS窗口下并不能直接使用awk(如图10-31所示)。当然为了自己的习惯,也可以在UnxUtils包中直接把gawk.exe改名或复制并改名为awk.exe。
awk在东莞seo中最为突出的功能就是支持对字段的处理,可以按照指定字符把每行数据分成字段的形式,然后按照字段数据做出相应的处理。众所周知日志文件中的数据都是以空格分段的,因此awk会在日志分析工作中起到很重要的作用。awk的基本格式如下:
awk-F pattern {action}
一F后面跟的是分隔符,也就是以指定的符合来对每一行要处理的数据分段,默认为空格。 pattern模式,也就是action执行的条件,当命令中缺少pattern时,awk会对每行数据都执行action。在东莞seo中经常用到的pattern形式有:/正则表达式/,关系表达式,模式匹配表达式。
action即执行的操作,一般是按照一定格式打印出所需要的数据。当命令中缺少action时,即打印出整行符合条件的数据。
在awk中,使用$n来记录第n段数据,n为整数;$0表示整行数据;NF为当前记录中的字段数,$NF可以用来表示最后一个字段。
如图10-32所示,笔者建立了一个文件8.txt,里面有三列数据:关键词、指数和百度搜索结果(数据为随便虚构的),下面通过对此文件中数据的处理来演示一下awk的使用方法。
条件为正则表达式:图10-33为在8.txt中提取以“东莞seo”开头的整行数据,“//”中为正则表达式条件,$0为整行数据。打印整行数据时可以省略action,也就是可以使用图10-33中的第二种形式。
条件为关系表达式:图10-34中第一条命令为在8.txt中提取指数大于1000的数据行;第二条命令为在8.txt中提取指数大于1000的数据,且只需要提取关键词和指数数据,并不需要提取百度搜索结果数。$1记录的是数据的第一个字段即关键词,$2记录的是数据的第二个字段即指数,在action中使用“,”分割两个变量,结果中会表现为空格,如果不加“,”,则两列数据会紧贴到一起。第三条命令表示变量之间也可以进行运算,意思是在8.txt中提取指数和百度搜索结果数的比值大于0.0 01的数据(在一定程度上表示可优化价值),只提取关键词不需要其他数据。
条件为模式匹配表达式:图10-35中的两条命令分别表示为提取8.txt内关键词中包含和不包含“东莞seo”的数据。“~”为匹配,“!~”为不匹配。