博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk条件语句
阅读量:5086 次
发布时间:2019-06-13

本文共 1527 字,大约阅读时间需要 5 分钟。

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

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

在这一部分,我们主要就在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

转载于:https://www.cnblogs.com/gccbuaa/p/7048714.html

你可能感兴趣的文章
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>