Linux|如何在 awk 中使用流控制语句

引言

当您从 Awk 系列一开始回顾我们迄今为止介绍的所有 Awk 示例时,您会注意到各个示例中的所有命令都是按顺序执行的,即一个接一个。但在某些情况下,我们可能希望根据某些条件运行一些文本过滤操作,这就是流程控制语句的方法。

Awk 编程中有各种流程控制语句,包括:

  • if-else 语句
  • 声明
  • while 语句
  • do while 语句
  • 中断语句
  • 继续声明
  • 下一个声明
  • 下一个文件语句
  • 退出声明

然而,对于本系列的范围,我们将阐述:if-else、for、while 和 do while 语句。

1. if-else 语句

if 语句的预期语法与 shell if 语句的语法类似:

复制代码
if  (condition1) {
     actions1
}
else {
      actions2
}

在上述语法中,condition1和condition2是Awk表达式,actions1和actions2是满足各自条件时执行的Awk命令。

当条件1满足时,即为真,则执行actions1并退出if语句,否则执行actions2。

if 语句也可以扩展为 if-else_if-else 语句,如下所示:

复制代码
if (condition1){
     actions1
}
else if (conditions2){
      actions2
}
else{
     actions3
}

对于上面的形式,如果条件 1 为 true,则执行 actions1 并退出 if 语句,否则评估条件 2,如果为 true,则执行 actions2 并退出 if 语句。然而,当条件2为假时,则执行动作3并且退出if语句。

这是使用 if 语句的一个例子,我们有一个用户列表及其年龄存储在文件 users.txt 中。

我们想要打印一条声明,指明用户的姓名以及用户的年龄是小于还是大于 25 岁。

我们可以编写一个简短的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
  • 输出结果

2. 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} }'
  • 输出结果

3. 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

4. do while 语句

它是上面 while 语句的修改,具有以下底层语法:

复制代码
do {
     actions
}
 while (condition) 

细微的差别在于,在 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

结果如上图一致。

总结

Awk 系列的这一部分应该让您清楚地了解如何根据特定条件控制 Awk 命令的执行。

本文由mdnice多平台发布

相关推荐
小橘子8318 小时前
(学习)Claude Code 源码架构深度解析
学习·程序人生·架构
婷婷_17218 小时前
【PCIe 验证每日学习・Day26】PCIe 错误处理与异常恢复机制
网络·学习·程序人生·芯片·原子操作·pcie 验证
黄昏回响21 小时前
计算机系统基础知识(十四):软件篇之计算机网络详解
计算机网络·程序人生·面试·职场和发展·改行学it
runafterhit2 天前
中年失业焦虑与困境分析
程序人生
婷婷_1722 天前
DWC Ethernet QoS VLAN高级功能深度解析
网络·学习·程序人生·ethernet·芯片·vlan·gmac
Yuri X-20213 天前
VS2022实战测试题——2
程序人生·c#·个人开发·visual studio
婷婷_1723 天前
DWC Ethernet QoS VLAN功能实现详解
网络·学习·程序人生·ethernet·芯片·vlan·gmac
婷婷_1724 天前
深入理解VLAN:从原理到实践(基于DesignWare Ethernet QoS)
网络·学习·程序人生·ethernet·芯片·gmac
郝学胜-神的一滴4 天前
Pytorch张量拼接秘籍:cat与stack的深度解析与实战
人工智能·pytorch·python·深度学习·程序人生·算法·机器学习
一次旅行4 天前
心理学知识分享(2026.4.3)
程序人生