当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行。但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句。
在 awk 编程中有各种各样的流程控制语句,其中包括:
- if-else 语句
- for 语句
- while 语句
- do-while 语句
- break 语句
- continue 语句
- next 语句
- nextfile 语句
- exit 语句
然而,对于本系列的这一部分,我们将阐述:if-else
、for
、while
和 do while
语句。请记住,我们已经在这个 awk 系列的第 6 部分介绍过如何使用 awk 的 next
语句。
1. if-else 语句
如你想的那样。if 语句的语法类似于 shell 中的 if 语句:
if (条件 1) {
动作 1
}
else {
动作 2
}
在上述语法中,条件 1
和条件 2
是 awk 表达式,而动作 1
和动作 2
是当各自的条件得到满足时所执行的 awk 命令。
当条件 1
满足时,意味着它为真,那么动作 1
被执行并退出 if 语句
,否则动作 2
被执行。
if 语句还能扩展为如下的 if-else_if-else
语句:
if (条件 1){
动作 1
}
else if (条件 2){
动作 2
}
else{
动作 3
}
对于上面的形式,如果条件 1
为真,那么动作 1
被执行并退出 if 语句
,否则条件 2
被求值且如果值为真,那么动作 2
被执行并退出 if 语句
。然而,当条件 2
为假时,那么动作 3
被执行并退出 if 语句
。
这是在使用 if 语句的一个实例,我们有一个用户和他们年龄的列表,存储在文件 users.txt 中。
我们要打印一个清单,显示用户的名称和用户的年龄是否小于或超过 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