当你回顾全部到目前为止咱们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各类实例的全部指令是顺序执行的,即一个接一个地执行。但在某些状况下,咱们可能但愿基于一些条件进行文本过滤操做,即流程控制语句容许的那些语句。html
在 awk 编程中有各类各样的流程控制语句,其中包括:linux
然而,对于本系列的这一部分,咱们将阐述:if-else
、for
、while
和 do while
语句。请记住,咱们已经在这个 awk 系列的第 6 部分介绍过如何使用 awk 的 next
语句。git
如你想的那样。if 语句的语法相似于 shell 中的 if 语句:github
if (条件 1) { 动做 1 } else { 动做 2 }
在上述语法中,条件 1
和条件 2
是 awk 表达式,而动做 1
和动做 2
是当各自的条件获得知足时所执行的 awk 命令。shell
当条件 1
知足时,意味着它为真,那么动做 1
被执行并退出 if 语句
,不然动做 2
被执行。编程
if 语句还能扩展为以下的 if-else_if-else
语句:bash
if (条件 1){ 动做 1 } else if (条件 2){ 动做 2 } else{ 动做 3 }
对于上面的形式,若是条件 1
为真,那么动做 1
被执行并退出 if 语句
,不然条件 2
被求值且若是值为真,那么动做 2
被执行并退出 if 语句
。然而,当条件 2
为假时,那么动做 3
被执行并退出 if 语句
。less
这是在使用 if 语句的一个实例,咱们有一个用户和他们年龄的列表,存储在文件 users.txt 中。ide
咱们要打印一个清单,显示用户的名称和用户的年龄是否小于或超过 25 岁。测试
aaronkilik@tecMint ~ $ 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
若是你想在一个循环中执行一些 awk 命令,那么 for 语句
为你提供一个作这个的合适方式,格式以下:
for ( 计数器的初始化 ; 测试条件 ; 计数器增长 ){ 动做 }
这里,该方法是经过一个计数器来控制循环执行来定义的,首先你须要初始化这个计数器,而后针对测试条件运行它,若是它为真,执行这些动做并最终增长这个计数器。当计数器不知足条件时,循环终止。
在咱们想要打印数字 0 到 10 时,如下 awk 命令显示 for 语句是如何工做的:
$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
输出样例
0 1 2 3 4 5 6 7 8 9 10
while 语句的传统语法以下:
while ( 条件 ) { 动做 }
这个条件
是一个 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
它是上文中 while
语句的一个变型,具备如下语法:
do { 动做 } while (条件)
这轻微的区别在于,在 do while
语句下,awk 的命令在求值条件以前执行。使用上文 while
语句的例子,咱们能够经过按以下所述修改 test.sh 脚本中的 awk 命令来讲明 do while
语句的用法:
#!/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 脚本。
via: http://www.tecmint.com/use-flow-control-statements-with-awk-command/
做者:Aaron Kili
译者:robot527
校对:wxy