PUB:Part 12 - How to Use Flow Control Statements in Awk - Part 12

@robot527
This commit is contained in:
wxy 2016-08-27 17:32:36 +08:00
parent ad69946318
commit 6e25f7d215

View File

@ -1,7 +1,7 @@
awk 系列:在 awk 中如何使用流程控制语句 awk 系列:在 awk 中如何使用流程控制语句
=========================================== ===========================================
当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行。但在某些情况下,我们可能希望运行基于一些条件的文本过滤操作,即其中的流程控制语句集的方法 当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行。但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句
![](http://www.tecmint.com/wp-content/uploads/2016/08/Use-Flow-Control-Statements-in-Awk.png) ![](http://www.tecmint.com/wp-content/uploads/2016/08/Use-Flow-Control-Statements-in-Awk.png)
@ -17,11 +17,11 @@ awk 系列:在 awk 中如何使用流程控制语句
- nextfile 语句 - nextfile 语句
- exit 语句 - exit 语句
然而,对于该系列的这一部分我们将阐述if-else、for、while 和 do while 语句。请记住,我们已经在这个 awk 系列的第 6 部分介绍过如何使用 awk 的 next 语句。 然而,对于本系列的这一部分,我们将阐述:`if-else`、`for`、`while` 和 `do while` 语句。请记住,我们已经在这个 [awk 系列的第 6 部分][1]介绍过如何使用 awk 的 `next` 语句。
### 1. if-else 语句 ### 1. if-else 语句
if 语句预期的语法类似于 shell 中的 if 语句: 如你想的那样。if 语句的语法类似于 shell 中的 if 语句:
``` ```
if (条件 1) { if (条件 1) {
@ -32,11 +32,11 @@ else {
} }
``` ```
在上述语法中,条件 1 和条件 2 是 awk 表达式,而动作 1 和动作 2 是当各自的条件得到满足时 awk 命令的执行 在上述语法中,`条件 1``条件 2` 是 awk 表达式,而`动作 1``动作 2` 是当各自的条件得到满足时所执行的 awk 命令。
当条件 1 满足时,意味着它为真,那么动作 1 被执行并退出 if 语句,否则动作 2 被执行。 `条件 1` 满足时,意味着它为真,那么`动作 1` 被执行并退出 `if 语句`,否则`动作 2` 被执行。
if 语句还能扩展为如下的 if-else_if-else 语句: if 语句还能扩展为如下的 `if-else_if-else` 语句:
``` ```
if (条件 1){ if (条件 1){
@ -50,7 +50,7 @@ else{
} }
``` ```
对于上面的形式,如果条件 1 为真,那么动作 1 被执行并退出 if 语句,否则条件 2 被求值且如果值为真,那么动作 2 被执行并退出 if 语句。然而,当条件 2 为假时,那么动作 3 被执行并退出 if 语句。 对于上面的形式,如果`条件 1` 为真,那么`动作 1` 被执行并退出 `if 语句`,否则`条件 2` 被求值且如果值为真,那么`动作 2` 被执行并退出 `if 语句`。然而,当`条件 2` 为假时,那么`动作 3` 被执行并退出 `if 语句`
这是在使用 if 语句的一个实例,我们有一个用户和他们年龄的列表,存储在文件 users.txt 中。 这是在使用 if 语句的一个实例,我们有一个用户和他们年龄的列表,存储在文件 users.txt 中。
@ -96,9 +96,7 @@ User Kili Seth is more than 25 years old
### 2. for 语句 ### 2. for 语句
如果你想在一个循环中执行一些 awk 命令,那么具有下面语法的 for 语句为你提供一个合适的方式来做: 如果你想在一个循环中执行一些 awk 命令,那么 `for 语句`为你提供一个做这个的合适方式,格式如下:
这里,该方法是简单地通过一个计数器来控制循环执行的定义,首先你需要初始化这个计数器,然后针对测试条件运行它,如果它为真,执行这些动作并最终增加这个计数器。当计数器不满足条件时,循环终止。
``` ```
for ( 计数器的初始化 ; 测试条件 ; 计数器增加 ){ for ( 计数器的初始化 ; 测试条件 ; 计数器增加 ){
@ -106,6 +104,8 @@ for ( 计数器的初始化 ; 测试条件 ; 计数器增加 ){
} }
``` ```
这里,该方法是通过一个计数器来控制循环执行来定义的,首先你需要初始化这个计数器,然后针对测试条件运行它,如果它为真,执行这些动作并最终增加这个计数器。当计数器不满足条件时,循环终止。
在我们想要打印数字 0 到 10 时,以下 awk 命令显示 for 语句是如何工作的: 在我们想要打印数字 0 到 10 时,以下 awk 命令显示 for 语句是如何工作的:
``` ```
@ -138,9 +138,9 @@ while ( 条件 ) {
} }
``` ```
这条件是一个 awk 表达式而动作是当条件为真时被执行的 awk 命令。 个`条件`是一个 awk 表达式而`动作`是当条件为真时被执行的 awk 命令。
下面是一个说明使用 while 语句来打印数字 0 到 10 的脚本: 下面是一个说明使用 `while` 语句来打印数字 0 到 10 的脚本:
``` ```
#!/bin/bash #!/bin/bash
@ -179,7 +179,7 @@ $ ./test.sh
### 4. do while 语句 ### 4. do while 语句
它是上文中 while 语句的一个变型,具有以下语法: 它是上文中 `while` 语句的一个变型,具有以下语法:
``` ```
do { do {
@ -188,7 +188,7 @@ do {
while (条件) while (条件)
``` ```
这轻微的区别在于,在 do while 语句下awk 的命令在求值条件之前执行。使用上文 while 语句的例子,我们可以通过按如下所述修改 test.sh 脚本中的 awk 命令来说明 do while 语句的用法: 这轻微的区别在于,在 `do while` 语句下awk 的命令在求值条件之前执行。使用上文 `while` 语句的例子,我们可以通过按如下所述修改 test.sh 脚本中的 awk 命令来说明 `do while` 语句的用法:
``` ```
#!/bin/bash #!/bin/bash
@ -227,19 +227,20 @@ $ ./test.sh
### 总结 ### 总结
这不是关于 awk 的流程控制语句的一个全面的指南,正如我早先提到的,还有其他几个流程控制语句在 awk 里 这不是关于 awk 的流程控制语句的一个全面的指南,正如我早先提到的,在 awk 里还有其他几个流程控制语句。
尽管如此awk 系列的这一部分使应该你明白了一个明确的基于某些条件控制的 awk 命令是如何执行的基本概念。 尽管如此awk 系列的这一部分使应该你明白了一个明确的基于某些条件控制的 awk 命令是如何执行的基本概念。
你还可以阐述更多其余的流程控制语句以获得更多关于该主题的理解。最后,在 awk 的系列下一节,我们将进入编写 awk 脚本。 你还可以了解其余更多的流程控制语句以获得更多关于该主题的理解。最后,在 awk 的系列下一节,我们将进入编写 awk 脚本。
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
via: http://www.tecmint.com/use-flow-control-statements-with-awk-command/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+tecmint+%28Tecmint%3A+Linux+Howto%27s+Guide%29 via: http://www.tecmint.com/use-flow-control-statements-with-awk-command/
作者:[Aaron Kili][a] 作者:[Aaron Kili][a]
译者:[robot527](https://github.com/robot527) 译者:[robot527](https://github.com/robot527)
校对:[校对者 ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux 中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux 中国](https://linux.cn/) 荣誉推出
[a]: http://www.tecmint.com/author/aaronkili/ [a]: http://www.tecmint.com/author/aaronkili/
[1]: https://linux.cn/article-7609-1.html