当前位置: 首页 > news >正文

awk条件语句

条件语句用于在运行操作之前做一个測试。在前面的章节中,我们看到了模式匹配规则的一些演示样例。

模式匹配规则本质上就是影响输入循环的条件表达式。

在这一部分,我们主要就在action中所使用的条件语句进行探讨。

条件语句以if开头,并计算放在圆括号里的表达式。

语法是:

if  (expression )
action1
[ else
action2 ]

假设条件表达式expression的值为真(非零或非空)。就运行action1 。

当存在else语句时。假设条件表达式的值为假(零或空) 。则运行action2。一个条件表达式可能包括算术运算符、关系操作符、或布尔操作符。这些都在awk脚本中讨论过。

或许最简单的条件表达式是測试一个变量是否非零。

if  (x ) print x

假设x是零, print语句将不运行。假设x是一个非零值,将打印x的值。也能够測试x是否等于还有一个值:

if  ( x  == y  ) print x

注意。 "=="是关系操作符而"="是赋值操作符。我们还能够用模式匹配操作符"~"来測试x是否与一个模式匹配:

if  ( x ~  / [yY ] (es ) ?/  ) print x

下面是几个补充的语法要点。假设操作时由多个语句组成的,要用一对大括号将操作括起来。

if  (expression )
  statement1
  statement2
}

awk对大括号和语句的位置没有特殊的要求(和sed不同)。左大括号放在条件表达式后面,能够与条件表达式位于一行也能够在下一行。第一条语句能够紧跟左大括号或从下一行開始。右大括号放在最好一条语句的后面。能够与最后一条语句位于同一行也能够在下一行。在大括号的前后同意有空格或制表符。

尽管没有要求语句缩进书写,但这样能够改善可读性。

右大括号和else后面的换行符是可选的。

if  ( expression ) action1
[ else action2 ]

假设在action1后面加一个分号表示结束。 action1后面的换行也是可选的。

if  ( expression ) action1;  [ else action2 ]

假设在同一行上用分号分隔多个语句。相同须要使用大括号。

在前面的文章中,我们曾看见过一段脚本用于计算学生平均成绩。我们能够用一个条件来推断某个学生是否及格。

if  ( avg  >=  65  )
    grade  =  "Pass"
else
    grade  =  "Fail"

赋给grade的值取决于表达式"avg >=65" 的计算结果是真还是假。

能够用多个条件语句来測试多个条件中的某个是否为真。比如,或许学生的成绩要用字母分级表示,而不是用及格或不及格来表示。下面用一个条件结构依据学生的平均分来指定一个字母成绩:

if  (avg  >=  90 ) grade  =  "A"
else  if  (avg  >=  80 ) grade  =  "B"
else  if  (avg  >=  70 ) grade  =  "C"
else  if  (avg  >=  60 ) grade  =  "D"
else grade  =  "F"

应该注意到的一个重要事情是。这样的连续条件仅仅有当一个条件表达式计算结果为真时才停止求值。这时将跳过其它的条件。

假设没有一个条件表达式的计算结果为真,将执行最后的else部分,执行默认操作,在这样的情况下为grade赋值"F" 。

參考资料:http://www.linuxawk.com/communication/543.html

相关文章:

  • ES5新特性
  • MySQL用命令行复制表,查看表结构
  • java并发之TimeUnit理解
  • spring定时任务
  • 读《十亿美金的教训》看中国传奇人物
  • TCP端口状态说明ESTABLISHED、TIME_WAIT
  • http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 异常
  • tomcatserver管理界面username和password忘记
  • 安装gitlab
  • 图解 Java IO : 一、File源码
  • Linux下软件分类与安装
  • flume自定义拦截器
  • [sqoop] sqoop 小试牛刀
  • linux select函数详解【转】
  • 前端优化的技巧
  • 【译】理解JavaScript:new 关键字
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • java2019面试题北京
  • Java小白进阶笔记(3)-初级面向对象
  • js中的正则表达式入门
  • Linux gpio口使用方法
  • PAT A1050
  • 从0实现一个tiny react(三)生命周期
  • 简析gRPC client 连接管理
  • 一道闭包题引发的思考
  • 译自由幺半群
  • 源码安装memcached和php memcache扩展
  • No resource identifier found for attribute,RxJava之zip操作符
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​MySQL主从复制一致性检测
  • ​决定德拉瓦州地区版图的关键历史事件
  • #etcd#安装时出错
  • #NOIP 2014# day.2 T2 寻找道路
  • #pragma multi_compile #pragma shader_feature
  • (1)(1.13) SiK无线电高级配置(五)
  • (4)Elastix图像配准:3D图像
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (Forward) Music Player: From UI Proposal to Code
  • (Python) SOAP Web Service (HTTP POST)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)进入MySQL 【事务】
  • (五)activiti-modeler 编辑器初步优化
  • (原創) 未来三学期想要修的课 (日記)
  • (转)http协议
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .net 4.0发布后不能正常显示图片问题
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践