这个是我自己写的 全部关于 awk学习的目录导航 ,感兴趣的可以看看。

 


 
        在上一文章,我学习了 如何在 awk 中使用 if 条件判断句,这一章 我打算学习一下 awk 中的 循环语句!,一说到循环,肯定就想到了 for、while 等…
      

for 的语法格式:

for 循环有两种语法格式:
 
格式1:
for (初始化;布尔表达式;表达式)
{
语句…
}
 
 
格式2:
for(变量 in 数组)
{
语句…
}

举例格式1,在 BEGIN{commands} 模式中使用 for循环:
在这里插入图片描述
举例格式2:

        语法格式2 会提到数组,我已经在下篇文章中,简单的介绍了数组,以及如何在 awk 的 for 循环中 使用数组!只能麻烦大家需要看的点击下面链接去看吧,我这里偷个懒不想再搬了!希望大家理解:

点击此链接去了解和学习:数组、下标、已经awk 中如何使用数组
在这里插入图片描述
        这里就是随便举个例子,懂得就看懂了,不懂得还是得点击链接去了解一下这是什么,如果给您带来不便,还请谅解!
       


       

while 的语法格式:

while 循环语法:
       
while(布尔表达式){
语句…

}
       
       
       
do while 循环语法:
       
do {
代码语句…
}
while(条件)

while 循环实例:

       
        为了方便表达,还与上面的for循环一样,使用 BEGIN{commands} 语句块
在这里插入图片描述
        当 while 对应的条件满足的时候,则执行后面的语句,每执行一次对条件进行一次更改,直到执行完毕后终止循环。(如上图所示,第一次执行的条件是 i=1,第二次执行的条件是 i=2…直到最后 i=10的时候,执行完毕就终止循环!

       


do…while… 循环实例:

       

关于 “do…while…”,它与 while循环不同之处:

while 循环: 只有满足条件 的时候,才会执行对应的语句;

do…while 循环:无论是否满足条件,都会先执行一遍 do 对应的代码,然后再判断是否满足 while{commands} 中的对应条件,满足条件则再次执行do对应的代码,如不满足则不再执行!

举例:
在这里插入图片描述

说到循环,那么与循环相对应的就是:跳出循环了!下面看一下关于跳出循环:
       


跳出循环:

       
        与其他编程语言中一样,awk 中同样可以使用 continue 与 break 跳出循环!
       

continue —— 跳出“当前”循环

在这里插入图片描述
清楚的看见,只有第三行没有打印!
 

break —— 跳出“整个”循环

在这里插入图片描述
清楚的看见,第三行和第三行之后都没有打印!


exit —— 退出 awk 命令

在这里插入图片描述
        因为跳出了awk命令,所以后面的 print 也不再执行!但是,当 awk语句中有 “exit” 和 “END{commands} 语句块” 的时候,exit 并不是表示退出awk命令;而是表示直接执行 END{commands} 语句块中的内容!
在这里插入图片描述
        换句话说,当 awk命令中有 END模式的时候,使用exit 意味着:直接执行“END模式”中的动作,其他动作将不再执行!如果没有使用“END模式”,就意味着退出 awk 命令!
       


next —— 跳过当前行

awk 可以使用 “exit” 退出整个命令行,也可以使用 “next”结束当前行:

root@zhengzelin:~# awk '{if(NR==2){next}{print NR,$0}}' test
1 192.168.1.1
3 192.168.1.3
4 192.168.1.4

        我们都知道 awk 是逐行处理文件,如果我们有一行内容不需要awk 处理,那么我们就可以使用 “next” 来告诉awk 哪一行内容不需要处理!

        其实,两个例子可以发现 next 与 continue 有些类似,只是 “continue” 是针对循环来说的,“continue”的作用是结束本次循环,而 awk 逐行处理文本,它自己本身不就是一种循环吗?当然,他们的用法还是不一样的。


nextfile —— 跳过当前文件

        nextfile 表示: 在某条件的时候跳过,但是不再执行此文件,立马跳到下一个文件执行!但是下一个文件执行的话,使用的还是同一个条件!

root@zhengzelin:~# awk 'NR==3{next} {print NR,$0}' test
1 192.168.1.1
2 192.168.1.2
4 192.168.1.4
root@zhengzelin:~# awk 'FNR==3{nextfile} {print FNR,$0}' test test
1 192.168.1.1
2 192.168.1.2
1 192.168.1.1
2 192.168.1.2

上一篇:awk 中使用 if 条件判断句

下一篇:数组、下标、awk中使用数组…

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐