曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4164|回复: 0
打印 上一主题 下一主题

循环(while, do..while, for, break, continue, exit)

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-2-25 16:51:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
awk 中的循环和 C 语言中的类似,下面是几种语法形式,下面是几个实例。

1. 在一行上连续输出 10 个字符 'a'
$ awk 'BEGIN { while (count++ < 10) string = string"a"; print string; }'
aaaaaaaaaa
注意,BEGIN 不能漏,否则不能输出,这是因为 awk 是作用于输入文本的,而 BEGIN 是在所有作用于文本的内容之前的处理(预处理),因此它不依赖于输入文本,故而能将它范围内的结果输出来。同时,也不能偶写成:
$ awk 'BEGIN { while (count++ < 10) print "a"; }'
这样的形式。如果写成这样,输出为每行一个字母 'a‘,这是因为 print 表达式打印后自带有换行功能。

2. do...while 示例
$ awk 'BEGIN { count = 1;
> do
> print "ouput at least once";
> while (count != 1) }'
ouput at least once

3. for 循环
测试文本:
$ cat score.txt
beyes 10000 90 78 98
admin 10001 99 64 72
tony  10002 45 32 56
tom   10003 12 34 87
lilei 10004 48 25 70
运行输出:
$ awk '{ for (i = 1; i <= NF; i++) total = total + i; } END {print total}' score.txt
75
上面命令中,因为每一行都是 5 个域,因此每一行的值是 1+2+3+4+5 = 15,共有 5 行,所以最后算得的记过是 15 * 5 = 75 。

4. 将每一行中的域倒序输出
$ awk 'BEGIN { ORS=""; } { for (i = NF; i > 0; i--) print $i, " "; print "\n"; }' score.txt
98  78  90  10000  beyes  
72  64  99  10001  admin  
56  32  45  10002  tony  
87  34  12  10003  tom  
70  25  48  10004  lilei
注意,上面的 ORS 被设置为空。这是因为 ORS 是输出记录的分隔符,如果不设置为空,那么在 print $i, " " 这条语句后会默认采用换行,这就将原本一行的记录分割为多行输出,而这种情况并不是我们想要的。

5. break 语句测试
$ awk 'BEGIN {count = 1; while(1) {
> print "Loop...";
> if (count == 5)
> break;
> count++;
> }}'
Loop...
Loop...
Loop...
Loop...
Loop...

6. continue 语句测试
[Bash shell] 纯文本查看 复制代码
$ cat continue.awk 
BEGIN {
    count = 1;
    while ( count <= 8) {
        if ( count >= 5) {
            count++;
            continue;
        }
        print "Value of count", count;
        count++;
    }
}

运行输出:
$ awk -f continue.awk
Value of count 1
Value of count 2
Value of count 3
Value of count 4
由输出可见,只输出了 4 行。

7. exit 语句
exit 语句将导致退出整个脚本。测试代码:
[Bash shell] 纯文本查看 复制代码
$ cat exit.awk 
BEGIN {
    count = 1;
    while (count <= 8) {
        if (count == 5) {
            exit;
        }
        print "Value of count", count;
        count++;
    }
}

运行输出:
$ awk -f exit.awk
Value of count 1
Value of count 2
Value of count 3
Value of count 4
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 17:13 , Processed in 0.076430 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表