介绍:
--可以从文件或字符串中基于指定规则浏览和抽取信息;
--是一种自解释的编程语言;
--三种方式调用awk:
1、行方式
awk [-F filed-spearator] ‘command’ input-files([-F域分隔符]是可选的,因为awk使用空格作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果要浏览诸如passwd文件,此文件各域以冒号作为分隔符,则必须指明-F选项)
2、awk脚本
所有awk命令插入一个文件,并使awk可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它;
3、awk命令插入一个单独文件
Awk –f awk-script-file input-files(-f选项指明在文件awk_script_file中的awk脚本,input_files是使用awk进行浏览的文件名)
-- awk脚本由各种操作和组成;
--模式和动作
1、模式部分决定动作语句何时触发及触发事件(BEGIN,END)(使用BEGIN语句计数和打印头,BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行,END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志,如果不指明模式,awk总是匹配或打印行数)
2、动作对数据进行处理,放在大括号{}内指明。(print)
--分隔符、域和记录
1、awk执行时,其浏览域标记为$1,$2……$n,这种方法称为域标识,$0为所有域,利用逗号做域分隔。
2、注意执行时不要混淆符号$和shell提示符$,他们是不同的。
-- awk中的特殊元字符:+,?
--匹配操作符:~,!~
-- cat score.txt|awk ‘$0~/218.79.131.96/’
--awk ‘{if($1==”218.97.
3、有两种方式保存shell提示符下awk脚本的输出,最简单的方式是使用输出重定向符号>文件名,还有一种方法是使用tee命令。
模式和动作的例子:
#awk –F: ‘BEGIN {print “name path\n------------”}{print $
4、在使用awk碰到错误时,可从方法进行判断:确保整个awk命令用单引号括起来、确保命令内所有引号成对出现、确保用花括号括起动作语句,用圆括号括起条件语句、awk按照花括号来解释语法。
--awk中正则表达式及其操作(这里的正则表达式用//括起来):
1、元字符:+和?只适用于awk而不用于grep和sed,+匹配一个或多个字符;?匹配模式出现频率。
2、条件操作符:为使一域号匹配正则表达式,使用符号“~”后紧跟正则表达式,也可以使用if语句,awk中if语句后面的条件用()括起来。
$awk –F :‘{if($1~/brown/) print $0}’ passwd
$awk –F : ‘$3==“
$awk –F : ‘$
$awk –F : ‘$
$awk –F : ‘{if($1==”root” && $4==”
--awk有许多内置变量用来设置信息,这些变量可以被改变;(FILENAME:awk浏览的文件名;FS:设置输入域分隔符,等价于命令行-F选项;NF:浏览记录的域个数;NR:已读的记录数;OFS:输出域分隔符)
$awk –F: ‘{print NR,NF,$0}{if ($1~/^q…../ && $4 ~/[0-9]\{0,6\}/)} ’passwd
以上是本人总结的一点awk的语法和功能,很不全面,不过我觉得这些已经够目前所用了。。。欢迎大家批评指正。
--------------------next---------------------