awk 系列Part12:在 awk 中如何使用流程控制语句

awk 系列:在 awk 中如何使用流程控制语句

当你回顾全部到目前为止咱们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各类实例的全部指令是顺序执行的,即一个接一个地执行。但在某些状况下,咱们可能但愿基于一些条件进行文本过滤操做,即流程控制语句容许的那些语句。html

awk 系列Part12:在 awk 中如何使用流程控制语句

在 awk 编程中有各类各样的流程控制语句,其中包括:linux

  • if-else 语句
  • for 语句
  • while 语句
  • do-while 语句
  • break 语句
  • continue 语句
  • next 语句
  • nextfile 语句
  • exit 语句

然而,对于本系列的这一部分,咱们将阐述:if-elseforwhiledo while 语句。请记住,咱们已经在这个 awk 系列的第 6 部分介绍过如何使用 awk 的 next 语句。git

1. if-else 语句

如你想的那样。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

2. for 语句

若是你想在一个循环中执行一些 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

3. while 语句

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

4. do while 语句

它是上文中 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

本文由 LCTT 原创编译,Linux 中国 荣誉推出

相关文章
相关标签/搜索