精通awk系列(18):awk流程控制之if、while、switch、for语句



回到:


流程控制语句

注:awk中语句块没有作用域,都是全局变量。

if (condition) statement [ else statement ]
expr1?expr2:expr3
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
next
nextfile
exit [ expression ]
{ statements }
switch (expression) {
    case value|regex : statement
    ...
    [ default: statement ]
}

代码块

{statement}

if...else

# 单独的if
if(cond){
    statements
}

# if...else
if(cond1){
    statements1
} else {
    statements2
}

# if...else if...else
if(cond1){
    statements1
} else if(cond2){
    statements2
} else if(cond3){
    statements3
} else{
    statements4
}

搞笑题:妻子告诉程序员老公,去买一斤包子,如果看见卖西瓜的,就买两个。结果是买了两个包子回来。

# 自然语言的语义
买一斤包子
if(有西瓜){
    买两个西瓜
}

# 程序员理解的语义
if(没有西瓜){
    买一斤包子
}else{
    买两个包子
}
awk '
  BEGIN{
    mark = 999
    if (mark >=0 && mark < 60) {
      print "学渣"
    } else if (mark >= 60 && mark < 90) {
      print "还不错"
    } else if (mark >= 90 && mark <= 100) {
      print "学霸"
    } else {
      print "错误分数"
    }
  }
'

三目运算符?:

expr1 ? expr2 : expr3

if(expr1){
    expr2
} else {
    expr3
}
awk 'BEGIN{a=50;b=(a>60) ? "及格" : "不及格";print(b)}'
awk 'BEGIN{a=50; a>60 ? b="及格" : b="不及格";print(b)}' 

switch...case

switch (expression) {
    case value1|regex1 : statements1
    case value2|regex2 : statements2
    case value3|regex3 : statements3
    ...
    [ default: statement ]
}

awk 中的switch分支语句功能较弱,只能进行等值比较或正则匹配。

各分支结尾需使用break来终止。

{
    switch($1){
        case 1:
            print("Monday")
            break
        case 2:
            print("Tuesday")
            break
        case 3:
            print("Wednesday")
            break
        case 4:
            print("Thursday")
            break
        case 5:
            print("Friday")
            break
        case 6:
            print("Saturday")
            break
        case 7:
            print("Sunday")
            break
        default:
            print("What day?")
            break
    }
}

分支穿透:

{
    switch($1){
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            print("Weekday")
            break
        case 6:
        case 7:
            print("Weekend")
            break
        default:
            print("What day?")
            break
    }
}

while和do...while

while(condition){
    statements
}

do {
    statements
} while(condition)

while先判断条件再决定是否执行statements,do...while先执行statements再判断条件决定下次是否再执行statements。

awk 'BEGIN{i=0;while(i<5){print i;i++}}'
awk 'BEGIN{i=0;do {print i;i++} while(i<5)}'

多数时候,while和do...while是等价的,但如果第一次条件判断失败,则do...while和while不同。

awk 'BEGIN{i=0;while(i == 2){print i;i++}}'
awk 'BEGIN{i=0;do {print i;i++} while(i ==2 )}'

所以,while可能一次也不会执行,do...while至少会执行一次。

一般用while,do...while相比while来说,用的频率非常低。

for循环

for (expr1; expr2; expr3) {
    statement
}

for (idx in array) {
    statement
}

原文地址:https://www.cnblogs.com/f-ck-need-u/p/12381967.html

时间: 2024-07-31 15:49:10

精通awk系列(18):awk流程控制之if、while、switch、for语句的相关文章

java基础:流程控制(选择结构switch语句)

(1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+1; break; } 格式解释说明: switch:说明这是switch语句. 表达式:可以是byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串 case:后面的值就是要和表达式进行比较的值 break:表示程序到这里中断,跳出switch语句 default:如果所有的情况都不匹配,就执行这

精通awk系列(14):细说awk中的变量和变量赋值

回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态:unassigned类型 已赋值状态 引用未赋值的变量,其默认初始值为空字符串或数值0. 在awk中未声明的变量称为untyped,声明了但未赋值(只要引用了就声明了)的变量其类型为unassigned. gawk 4.2版提供了typeof()函数,可以测试变量的数据类型,包括测试变量是否声明.

php语法-数据类型,运算符,流程控制

数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array, object 特殊类型: null, resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3 = 0x123; 浮点类型float, double, real 有两种写法: $v1 = 1.234;     //带小数点,,就是浮点类型 $v2 = 1.

流程控制-for循环(序列/字典举例)

流程控制-for循环(序列) 循环 循环是一个结构,导致程序要重复一定的次数. 条件下循环也是如此,当然条件变为假,循环结束. for循环: 在序列里,使用for循环遍历. 语法: for iterating_var in sqquence: statement(s) 举例: (例1)for用法举例 In [1]: a = 'ABC' In [2]: a Out[2]: 'ABC' In [3]: for i in a: ...:     print i ...: A B C In [4]: f

Dream------scala--函数定义、流程控制、异常处理

Dream------scala--函数定义.流程控制.异常处理 一.函数的定义 1.新建工程 2.创建一个object package com.wls.scala.hello /** * Created by wls on 2015年8月11日21:06:332. */ object ScalaBasics { def main(args : Array[String]): Unit ={ } } def main(args : Array[String]) : Unit={} 上面这个就项目

五、Python流程控制

Python流程控制 (1)if else语句: a.if语句 Python的if语句类似其他语言.if语句包含一个逻辑表达式,使用表达式比较,在比较的结果的基础上做出决定 Python使用缩进作为其语句分组的方法,建议使用4个空格代替缩进 #!/usr/bin/python if 1<2: print "ok" 逻辑值用来表示诸如:对与错,真与假,空与非空等概念 逻辑值包含了两个值: --True:表示非空的量,所有非零数 --False:表示0,None,空的量等 #!/us

运算符 流程控制

一.运算符 1,算术 + - * /      % -- 取余 ++ --      +=  -= 加法:+        一般用于数字之间的运算    另外:用于字符串的拼接             任何类型的数据和字符串相加,结果都是字符串 除法:       注意结果的类型       java.lang.ArithmeticException: / by zero ++ -- :         复合运算符的位置 如果没有其他运算符参与,        在前和在后,效果一样 2,比较运算

PHP知识点--流程控制

一.分支结构:if语句:if(条件判断){//语句块} if else 语句:if(条件判断){//分支1}else{//分支2:}switch语句:switch(一个数据$v1){ //判断此v1变量跟下面的某个是否相等,如果相等,则进入对应进程.case 状态值1://进程1[break;]case 状态值2://进程2[break;]case 状态值3://进程3:[break;]......[default ://默认进程.]} 应用冲,break通常都会用上:只有一些特殊数据或需求的时

Shell 学习(三)--流程控制

目录 Shell 学习(三)--流程控制 1 if判断 2 case 语句 3 for循环 4 while 循环 Shell 学习(三)--流程控制 1 if判断 基本语法 if [ 条件判断式 ];then 程序 fi 或者 if[ 条件判断式 ] then 程序 elif[ 条件判断式 ] then 程序 fi 注意事项:(1) [ 条件判断式 ],中括号和条件判断式之间必须要有空格.(2) 推荐使用第二种方式 ? 应用实例 案例: 编写一个shell程序,请输入参数,大于等于60,则输出"