如何在Awk中使用流控制语句 - 第12部分

在本文中,我们将看到一些基于一些条件的文本过滤操作,在Linux中使用流控制语句与Awk命令。

当您查看所有到目前为止,我们已经介绍,从一开始的awk的例子awk的系列 ,你会发现,在不同的例子中的所有命令依次执行,这是一前一后。 但在某些情况下,我们可能需要运行某些文本滤波操作基于一些条件,即在那里的流量控制语句集的方法。
在Awk中使用流控制语句

在Awk中使用流控制语句

有各种流控制语句awk的程序 ,它们包括:
  1. if-else语句
  2. for语句
  3. while语句
  4. do-while语句
  5. break语句
  6. continue语句
  7. 下一条语句
  8. nextfile语句
  9. 退出语句
然而,对于这一系列的范围,我们将阐述对: if-elseforwhiledo while陈述。 请记住,我们已经通过走进如何在第6部分使用下面的语句这一点awk的系列

1. if-else语句

所述的预期语法if statement类似于if语句壳的:
if  (condition1) {
actions1
}
else {
actions2
}
另外,在上述的语法, condition1condition2都awk的表情,并actions1actions2是各自的条件成立时执行awk的命令。 当条件1为满意,这意味着它是真的,那么actions1被执行,if语句退出,否则actions2被执行。 if语句也可以扩展到if-else_if-else声明如下:
if (condition1){
actions1
}
else if (conditions2){
actions2
}
else{
actions3
}
对于上面的表格中,如果条件1为真,则actions1被执行,if语句退出,否则, 条件2被评估,如果它是真的,那么actions2被执行,if语句退出。 然而,当条件2是假的话,actions3被执行,if语句退出。 这里是在使用if语句的点的情况下,我们有用户和他们的年龄存储在文件中,users.txt的列表。 我们要打印指示用户名称的语句和用户的年龄是否小于或大于25岁。
aaronkilik@howtoing ~ $ cat users.txt
Sarah L			35    	F
Aaron Kili		40    	M
John  Doo		20    	M
Kili  Seth		49    	M    
我们可以写一个简短的shell脚本来执行我们上面的工作,这里是脚本的内容:
#!/bin/bash
awk ' { 
if ( $3 <= 25 ){
print "User",$1,$2,"is less than 25 years old." ;
}
else {
print "User",$1,$2,"is more than 25 years old" ; 
}
}'    ~/users.txt
然后保存文件并退出,使脚本可执行并运行如下:
$ chmod +x test.sh
$ ./test.sh
示例输出
User Sarah L is more than 25 years old
User Aaron Kili is more than 25 years old
User John Doo is less than 25 years old.
User Kili Seth is more than 25 years old

for语句

如果你想执行一些awk的一个循环命令,那么for语句为您提供一个合适的方式来做到这一点,与下面的语法: 这里,该方法通过使用计数器来控制循环执行来简单地定义,首先需要初始化计数器,然后针对测试条件运行它,如果为真,则执行动作,最后增加计数器。当计数器不满足条件时,循环终止。
for ( counter-initialization; test-condition; counter-increment ){
actions
}
下面的awk命令显示了如何for语句作品,在这里我们要打印的数字0-10:
$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
示例输出
0
1
2
3
4
5
6
7
8
9
10

while语句

while语句的常规语法如下:
while ( condition ) {
actions
}
条件是Awk表达式,并且操作是当条件为真时执行的Awk命令行。 下面是一个脚本来说明使用while语句的打印数0-10:
#!/bin/bash
awk ' BEGIN{ counter=0 ;
while(counter<=10){
print counter;
counter+=1 ;
}
}  
保存文件并使脚本可执行,然后运行它:
$ chmod +x test.sh
$ ./test.sh
示例输出
0
1
2
3
4
5
6
7
8
9
10

do while语句

它是while语句的变形例以上,具有以下潜在的语法:
do {
actions
}
while (condition) 
略有区别的是,在做的同时 ,评估条件前,awk的命令执行。 使用下上述说法 ,我们可以同时通过在test.sh脚本改变awk命令如下说明使用的非常的例子:
#!/bin/bash
awk ' BEGIN{ counter=0 ;  
do{
print counter;  
counter+=1 ;    
}
while (counter<=10)   
} 
'
修改脚本后,保存文件并退出。然后使脚本可执行并执行如下:
$ chmod +x test.sh
$ ./test.sh
示例输出
0
1
2
3
4
5
6
7
8
9
10

结论

这不是关于awk的流程控制语句一个全面的指南,因为我已经提到早前,也有awk的其他几个流程控制语句 。 尽管如此,这部分awk的系列应该给你如何用awk命令的执行,可以在一定条件下可以控制一个明确的基本理念。 您可以更详细地阐述其余的流控制语句,以获得对主题的更多理解。最后,在Awk系列的下一节中,我们将写入Awk脚本。