14.2. BEGIN模块
BEGIN 模块后紧跟着动作块,这个动作块在awk处理任何输入文档之前执行。所以他能够在没有任何输入的情况下进行测试。他通常用来改变内建变量的值,如OFS, RS和FS等,连同打印标题。如:$ awk 'BEGIN{FS=":"; OFS="\t"; ORS="\n\n"}{print $1,$2,$3} test。上式表示,在处理输入文档以前,域分隔符(FS)被设为冒号,输出文档分隔符(OFS)被配置为制表符,输出记录分隔符(ORS)被配置为两个换行符。$ awk 'BEGIN{print "TITLE TEST"}只打印标题。
14.3. END模块
END不匹配任何的输入文档,但是执行动作块中的任何动作,他在整个输入文档处理完成后被执行。如$ awk 'END{print "The number of records is" NR}' test,上式将打印任何被处理的记录数。
14.4. 重定向和管道
$ awk 'BEGIN{ "date" | getline d; print d}' test。执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印他。
$ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test。执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给d,split函数把变量d转化成数组mon,然后打印数组mon的第二个元素。
$ awk 'BEGIN{while( "ls" | getline) print}',命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把他打印到屏幕。这里没有输入文档,因为 BEGIN块在打开输入文档前执行,所以能够忽略输入文档。
$ awk 'BEGIN{printf "What is your name?"; getline name
$ awk 'BEGIN{while (getline 0) lc ; print lc}'。awk将逐行读取文档/etc/passwd的内容,在到达文档末尾前,计数器lc一直增加,当到末尾时,打印lc的值。注意,假如文档不存在,getline返回-1,假如到达文档的末尾就返回0,假如读到一行,就返回1,所以命令 while (getline
14.5. 条件语句
awk中的条件语句是从C语言中借鉴过来的,可控制程式的流程。
14.5.1. if语句格式:
{if (expression){
statement; statement; ...
}
}
$ awk '{if ($1
$ awk '{if ($1
14.5.2. if/else语句,用于双重判断。格式:
{if (expression){
statement; statement; ...
}
else{
statement; statement; ...
}
}
$ awk '{if ($1 > 100) print $1 "bad" ; else print "ok"}' test。假如$1大于100则打印$1 bad,否则打印ok。
$ awk '{if ($1 > 100){ count ; print $1} else {count--; print $2}' test。假如$1大于100,则count加一,并打印$1,否则count减一,并打印$1。
14.5.3. if/else else if语句,用于多重判断。格式:
{if (expression){
statement; statement; ...
}
else if (expression){
statement; statement; ...
}
else if (expression){
statement; statement; ...
}
else {
statement; statement; ...
}
}
14.6. 循环
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




