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

引言

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

alt

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 岁。

alt

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

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

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
alt

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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在风能领域,准确预测风速对于风电场的运行与管理至关重要。Matlab作为一个强大的数学计算和数据分析平台,被广泛应用于风速预测模型的构建。本文将深入探讨基于四种风速——随机风、基本风、阵风和渐变风的组合风速预测技术。 我们来理解这四种风速类型: 1. **随机风**:随机风是指风速呈现出随机性的变化,通常由大气湍流引起。在建模,通常通过统计方法如高斯分布或Weibull分布来模拟这种不确定性。 2. **基本风**:基本风速是指在无特定扰动条件下的平均风速,它是长期观测结果的平均值,通常用于结构设计和风能评估。 3. **阵风**:阵风是短时间内风速显著增强的现象,对建筑物和风力发电机造成的主要威胁之一。阵风的预测涉及到风的脉动特性分析。 4. **渐变风**:渐变风是指风速随时间和空间逐渐变化的过程,常见于风向转变或地形影响下的风场变化。 在Matlab,利用这四种风速类型进行组合预测,可以提高预测的准确性。预测模型可能包括以下几个步骤: 1. **数据收集与预处理**:收集历史风速数据,包括随机风、基本风、阵风和渐变风的数据,进行异常值检测、缺失值填充以及数据标准化。 2. **特征工程**:提取风速变化的相关特征,如平均值、标准差、极值、频率分布等,这些特征可能对预测有重要影响。 3. **模型选择**:可以选择多种预测模型,如时间序列分析(ARIMA、状态空间模型等)、机器学习算法(线性回归、决策树、支持向量机、神经网络等)或深度学习模型(LSTM、GRU等)。 4. **模型训练**:利用历史数据训练选定的模型,调整模型参数以优化性能,例如通过交叉验证来避免过拟合。 5. **模型验证与评估**:使用独立的测试集验证模型预测效果,常见的评估指标有均方误差(MSE)、平均绝对误差(MAE)和决定系数(R²)。 6. **组合预测**:结合四种风速的不同模型预测结果,可以采用加权平均、集成学习(如bagging、boosting)等方式,以提升整体预测精度。 7. **实时更新与动态调整**:实际应用,模型需要不断接收新的风速数据并进行在线更新,以适应风场环境的变化。 通过以上步骤,可以构建一个综合考虑各种风速特性的预测系统,这对于风电场的功率输出预测、风电设备的维护计划以及电网调度都具有重要价值。然而,需要注意的是,每个风场的地理环境、气候条件和设备状况都有所不同,因此模型的建立应根据实际情况进行定制和优
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值