前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux|如何在 awk 中使用流控制语句

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

作者头像
数据科学工厂
发布2024-05-27 16:40:43
670
发布2024-05-27 16:40:43
举报

引言

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

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

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

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

1. if-else 语句

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

代码语言:javascript
复制
if  (condition1) {
     actions1
}
else {
      actions2
}

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

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

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

代码语言:javascript
复制
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脚本来执行上面的工作,以下是脚本的内容:

代码语言:javascript
复制
#!/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

然后保存文件并退出,使脚本可执行并运行,如下所示:

代码语言:javascript
复制
$ chmod +x test.sh
$ ./test.sh
  • 输出结果

2. for 语句

如果您想在循环中执行某些 Awk 命令,则 for 语句为您提供了一种合适的方法,其语法如下:

这里,该方法简单地定义为使用计数器来控制循环执行,首先需要初始化计数器,然后根据测试条件运行它,如果为真,则执行操作,最后递增计数器。当计数器不满足条件时循环终止。

代码语言:javascript
复制
for ( counter-initialization; test-condition; counter-increment ){
      actions
}

以下 Awk 命令显示了 for 语句的工作原理,我们要在其中打印数字 0-10:

代码语言:javascript
复制
$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
  • 输出结果

3. while 语句

while 语句的常规语法如下:

代码语言:javascript
复制
while ( condition ) {
          actions
}

条件是一个 Awk 表达式,操作是条件为真时执行的 Awk 命令行。下面是一个脚本来说明如何使用 while 语句来打印数字 0-10:

代码语言:javascript
复制
#!/bin/bash
awk ' BEGIN{ counter=0 ;
         
        while(counter<=10){
              print counter;
              counter+=1 ;
             
}
}  

保存文件并使脚本可执行,然后运行它:

代码语言:javascript
复制
$ chmod +x test.sh
$ ./test.sh

4. do while 语句

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

代码语言:javascript
复制
do {
     actions
}
 while (condition) 

细微的差别在于,在 do while 下,Awk 命令在评估条件之前执行。使用上面 while 语句下的示例,我们可以通过更改 test.sh 脚本中的 Awk 命令来说明 do while 的用法,如下所示:

代码语言:javascript
复制
#!/bin/bash

awk ' BEGIN{ counter=0 ;  
        do{
            print counter;  
            counter+=1 ;    
        }
        while (counter<=10)   
} 

修改脚本后,保存文件并退出。然后使脚本可执行并按如下方式执行:

代码语言:javascript
复制
$ chmod +x test.sh
$ ./test.sh

结果如上图一致。

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 1. if-else 语句
  • 2. for 语句
  • 3. while 语句
  • 4. do while 语句
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档