awk 中的循环语句(for 、 while)及跳出循环:continue、break;exit,next!
文章目录for 的语法格式:while 的语法格式: 这个是我自己写的 全部关于 awk学习的目录导航 ,感兴趣的可以看看。 在上一文章,我学习了 如何在 awk 中使用 if 条件判断句,这一章 我打算学习一下 awk 中的 循环语句!,一说到循环,肯定就想到了 for、while 等…&nb...
文章目录
这个是我自己写的 全部关于 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
更多推荐
所有评论(0)