Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->Linux程序设计 ->正文

Awk 实例(二)

来源:IBM DW中国 作者:Daniel Robbins  时间:2007-04-22 点击: [收藏] [投稿]

要处理这种情况,代码最好考虑每个字段的记录数量,并依次打印每个记录。现在,代码只打印地址的前三个字段。以下就是我们想要的一些代码:


适合具有任意多字段的地址的 address.awk 版本


BEGIN { 
    FS="\n" 
    RS="" 
    ORS="" 
} 
 
{  
        x=1 
        while ( x<NF ) { 
                print $x "\t" 
                x++ 
        } 
        print $NF "\n" 
} 

首先,将字段分隔符 FS 设置成 "\n",将记录分隔符 RS 设置成 "",这样 awk 可以象以前一样正确分析多行地址。然后,将输出记录分隔符 ORS 设置成 "",它将使 print 语句在每个调用结尾 输出新行。这意味着如果希望任何文本从新的一行开始,那么需要明确写入 print "\n"

在主代码块中,创建了一个变量 x 来存储正在处理的当前字段的编号。起初,它被设置成 1。然后,我们使用 while 循环(一种 awk 循环结构,等同于 C 语言中的 while 循环),对于所有记录(最后一个记录除外)重复打印记录和 tab 字符。最后,打印最后一个记录和换行;此外,由于将 ORS 设置成 "",print 将不输出换行。程序输出如下,这正是我们所期望的:

我们想要的输出。不算漂亮,但用 tab 定界,以便于导入电子表格


Jimmy the Weasel        100 Pleasant Drive      San Francisco, CA 12345 
Big Tony        200 Incognito Ave.      Suburbia, WA 67890
Cousin Vinnie   Vinnie's Auto Shop      300 City Alley  Sosueme, OR 76543

循环结构

我们已经看到了 awk 的 while 循环结构,它等同于相应的 C 语言 while 循环。awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值。它类似于其它语言中的 "repeat...until" 循环。以下是一个示例:

do...while 示例


{
    count=1
    do {
        print "I get printed at least once no matter what" 
    } while ( count != 1 )
}

与一般的 while 循环不同,由于在代码块之后对条件求值,"do...while" 循环永远都至少执行一次。换句话说,当第一次遇到普通 while 循环时,如果条件为假,将永远不执行该循环。

for 循环
awk 允许创建 for 循环,它就象 while 循环,也等同于 C 语言的 for 循环:


for ( initial assignment; comparison; increment ) {
    code block
}

以下是一个简短示例:


for ( x = 1; x <= 4; x++ ) {
    print "iteration",x
}

此段代码将打印:


iteration 1
iteration 2
iteration 3
iteration 4

break 和 continue

此外,如同 C 语言一样,awk 提供了 break 和 continue 语句。使用这些语句可以更好地控制 awk 的循环结构。以下是迫切需要 break 语句的代码片断:


while 死循环


while (1) {
    print "forever and ever..."
}

while 死循环 1 永远代表是真,这个 while 循环将永远运行下去。以下是一个只执行十次的循环:


break 语句示例


x=1
while(1) {
    print "iteration",x
    if ( x == 10 ) {
        break
    }
    x++
}

这里,break 语句用于“逃出”最深层的循环。"break" 使循环立即终止,并继续执行循环代码块后面的语句。

continue 语句补充了 break,其作用如下:


x=1
while (1) {
    if ( x == 4 ) {
        x++
        continue
    }
    print "iteration",x
    if ( x > 20 ) {
        break
    }
    x++
}

这段代码打印 "iteration 1" 到 "iteration 21","iteration 4" 除外。如果迭代等于 4,则增加 x 并调用 continue 语句,该语句立即使 awk 开始执行下一个循环迭代,而不执行代码块的其余部分。如同 break 一样,continue 语句适合各种 awk 迭代循环。在 for 循环主体中使用时,continue 将使循环控制变量自动增加。以下是一个等价循环:


for ( x=1; x<=21; x++ ) {
    if ( x == 4 ) {
        continue
    }
    print "iteration",x
}


 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Awk 实例(一)   下一篇:动态语言PHP简介

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号