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多平台发布

相关推荐
程序员东岸10 小时前
避坑修链表:从顺序表到单链表的那点事儿(含可跑示例与小项目串联)
数据结构·笔记·学习·程序人生·链表
li星野1 天前
打工人日报#20251011
笔记·程序人生·fpga开发·学习方法
小龙报1 天前
《算法通关指南---C++编程篇(1)》
开发语言·c++·程序人生·算法·学习方法·visual studio
linksinke2 天前
html案例:制作一个图片水印生成器,防止复印件被滥用
开发语言·前端·程序人生·html
Apifox.2 天前
如何在 Apifox 中通过 AI 一键生成几十个测试用例?
人工智能·程序人生·ai·测试用例·ai编程
程序员Aries3 天前
自定义网络协议与序列化/反序列化
linux·网络·c++·网络协议·程序人生
立志成为大牛的小牛3 天前
数据结构——十七、线索二叉树找前驱与后继(王道408)
数据结构·笔记·学习·程序人生·考研·算法
菠萝吹雪ing3 天前
GUI 自动化与接口自动化:概念、差异与协同落地
运维·笔记·程序人生·自动化·接口测试·gui测试
郝学胜-神的一滴3 天前
Linux下的阻塞与非阻塞模式详解
linux·服务器·开发语言·c++·程序人生·软件工程