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

简介: 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 命令的执行。

相关文章
|
5月前
|
Linux Perl
Linux|从 STDIN 读取 Awk 输入
Linux|从 STDIN 读取 Awk 输入
42 4
|
5月前
|
Linux Perl
Linux技巧|Awk 比较运算符
在 Awk 中,使用比较运算符(如 &gt;, &lt;, ==, != 等)可方便地过滤文本和字符串。本文通过示例展示了如何处理食品购物清单,标记数量小于或等于 20 的商品。 Awk 语法 `expression { actions; }` 用于根据条件执行操作,如在满足条件的行末尾添加特殊标记。例如,`$3 &lt;= 20 { printf &quot;%s\t%s\n&quot;, $0,&quot;TRUE&quot; ; }` 会在数量小于或等于 20 的行后添加 &quot;TRUE&quot;。继续探索 Awk 的比较运算符以进行更复杂的文本处理。
62 2
|
2月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
2月前
|
Linux 数据处理 Perl
在Linux中,awk命令的如何使用?
在Linux中,awk命令的如何使用?
|
2月前
|
数据挖掘 Linux Perl
在Linux中,awk和sed命令的作用?
在Linux中,awk和sed命令的作用?
|
2月前
|
Linux BI 数据处理
在Linux中,如何使用awk和sed进行文本处理?
在Linux中,如何使用awk和sed进行文本处理?
|
2月前
|
存储 Unix Linux
|
4月前
|
存储 Linux BI
Linux 三剑客 grep、sed、awk
Linux三剑客`grep`、`sed`和`awk`是强大的文本处理工具。`grep`用正则表达式搜索匹配行;`sed`是流式编辑器,处理文本流而不直接修改原文件;`awk`则用于灵活的文本分析和报告生成。例如,`grep`可查找匹配模式,`sed`可以删除文件内容,而`awk`能提取特定字段。通过组合使用,它们能高效解决复杂文本任务。
52 1
|
4月前
|
算法 数据挖掘 Linux
探索Linux中的awk命令:强大的文本分析工具
探索Linux中的`awk`命令,一个强大的文本分析工具,用于模式扫描、数据提取与报告生成。本文介绍`awk`的用途、工作原理、特点及应用示例。`awk`基于&quot;模式-动作&quot;框架,从输入数据中匹配模式并执行相应操作。其特点包括:强大的文本处理能力、灵活的I/O及简洁的语法。示例涵盖了打印特定行、处理字段、计算统计值等场景。使用`awk`时要注意理解输入数据、测试脚本、优化性能和添加注释。深入学习以提升数据处理技能。
|
5月前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
73 2
下一篇
无影云桌面