awk连载8: awk循环控制语句

break语句

循环语句里,在循环的过程中,如果遇到break,则终止循环。

先看文件ee.txt的内容:

[root@vms63 ~]# cat ee.txt

1 2 3 4 5 3 2 1

1 3 3 2 2 3 2 1

[root@vms63 ~]#

现在对第一行的每部分进行循环:

awk连载8: awk循环控制语句 

NR==1指明的对第一行进行操作

结果就是把第一行的每个字段都打印出来了。

如果现在要求如果某部分的值大于2了,则不在循环

[root@vms63 ~]# awk 'NR==1{for(i=1;i<=NF;i++){if($i>2){break}print $i}}' ee.txt

1

2

[root@vms63 ~]#

此语句和上面的语句相比只是多了一条if($i>2){break},意思是如果某字段的值大于2则执行break

看看ee.txt的第一行的值1 2 3 4 5 3 2 1

 

此时第一个和第二个值分别是1和2,不满足$i>=2则继续执行print操作。

第三个值为3,满足判断语句的大于2,则执行break,然后循环结束,后面的值3 4 5 3 2 1都不再循环。

continue语句

如果遇到了continue的话,则continue后面的语句不再执行,直接进行下一次循环(记住break是终止循环)。还看刚才的例子

[root@vms63 ~]# awk 'NR==1{for(i=1;i<=NF;i++){if($i>2){continue}print $i}}' ee.txt

1

2

2

1

[root@vms63 ~]#

如果某分段的值大于2则执行continue,进行下一次循环,所以

看看ee.txt的第一行的值1 2 3 4 5 3 2 1

 

一开始的 1和2打印,3,4,5,3满足大于2,进行分别进行下一次循环,最后的2,1也是满足条件的,打印。

next语句

如果遇到next语句的话,则next后面的命令不再执行,跳出本循环进行下一次循环:

[root@vms63 ~]# awk '{for(i=1;i<=NF;i++){if($i>2){break}print $i}}' ee.txt

1

2

1

[root@vms63 ~]#

其实前面的语句里,默认也有next语句。

next语句也可以用于判断语句,比如下面的例子:

再看ee.txt的内容

[root@vms63 ~]# cat ee.txt

1 2 3 4 5 3 2 1

1 3 3 2 2 3 2 1

[root@vms63 ~]#

做如下操作,如果第2部分的值小于等于2,则不打印该行:

[root@vms63 ~]# awk '{if($2<=2){next};print $0}' ee.txt

1 3 3 2 2 3 2 1

[root@vms63 ~]#

当$2<=2的时候,则执行next,next后面的print $0不再执行,所以第一行跳过去了没有打印,在第二行里,第二部分的值为3,不满足if条件,所以不会执行next语句,则打印了print $0 。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读