当您回顾我们到目前为止介绍的所有awk示例时,从awk系列的开头开始,您会注意到各个示例的所有指令都是顺序执行的,即一个接一个地执行。但在某些情况下,我们可能希望根据某些条件进行文本过滤操作,即流控制语句允许的条件。awk编程中有各种流程控制语句,包括:if-else语句forstatementwhile语句do-while语句break语句continue语句next语句nextfile语句exit语句然而,对于系列的这一部分,我们将解释:if-else、for、while和dowhile语句。请记住,我们已经在本awk系列的第6部分介绍了如何使用awk的next语句。1.if-else语句做你想做的事。if语句的语法类似于shell中的if语句:if(条件1){action1}else{action2}上面的语法中,条件1和条件2是awk表达式,action1和action2是当它们各自的条件满足时执行的awk命令。当满足条件1时,即为真,则执行操作1并退出if语句,否则执行操作2。if语句也可以扩展为如下if-else_if-else语句:if(条件1){action1}elseif(条件2){action2}else{action3}对于上面的形式,如果条件1为真,则执行动作1并退出if语句,否则评估条件2,如果为真,则执行动作2并退出if语句。然而,当条件2为假时,则执行操作3并退出if语句。这是一个使用if语句的例子,我们有一个用户列表和他们的年龄存储在文件users.txt中。我们想要打印一个列表,显示用户的姓名以及用户的年龄是小于还是大于25岁。aaronkilik@tecMint~$catusers.txtSarahL35FAaronKili40MJohnDoo20MKiliSeth49M我们可以编写一个简短的shell脚本来完成我们上面所做的,这里是脚本的内容:#!/bin/bashawk'{if($3<=25){print"User",$1,$2,"islessthan25yearsold.";}else{print"User",$1,$2,"ismorethan25yearsold";}}'~/users.txt然后保存文件退出,使脚本可执行,运行如下:$chmod+xtest.sh$./test.sh输出样本for语句如果你想在循环中执行一些awk命令,那么for语句为你提供了一种合适的方式来执行此操作,格式如下:for(initializationofcounter;testcondition;counterincrement){action}这里,该方法定义了一个计数器来控制循环执行,首先你需要初始化这个计数器,然后根据测试条件运行它,如果为真,执行这些操作并最终增加这个计数器。当计数器不满足条件时,循环终止。以下awk命令显示了当我们想要打印数字0到10时for语句的工作原理:$awk'BEGIN{for(counter=0;counter<=10;counter++){printcounter}}'示例输出0123456789103.while语句while语句的传统语法如下:while(condition){action}条件是awk表达式,而action是条件为真时执行的awk命令。下面是一个脚本,说明如何使用while语句打印数字0到10:#!/bin/bashawk'BEGIN{counter=0;while(counter<=10){printcounter;counter+=1;}}'保存该文件和make脚本是可执行的,然后运行它:$chmod+xtest.sh$./test.sh输出示例0123456789104.dowhile语句它是上述while语句的变体,语法如下:do{action}while(condition)细微的区别在于,在dowhile语句下,awk的命令在评估条件之前执行。以上面的while语句为例,我们可以通过修改test.sh脚本中的awk命令来说明dowhile语句的使用,如下:#!/bin/bashawk'BEGIN{counter=0;do{printcounter;counter+=1;}while(counter<=10)}'修改脚本后,保存文件并退出。使脚本可执行,执行如下:$chmod+xtest.sh$./test.shOutputsample012345678910总结这不是awk的流控语句的全面指南,正如我前面提到的,在还有其他几个流控awk中的语句。尽管如此,awk系列的这一部分应该让您基本了解awk命令是如何基于某些条件控制来执行的。您还可以查看其余的更多流程控制语句,以获得对该主题的更多理解。***,在awk系列的下一期中,我们将开始编写awk脚本。
