1.3.2 switch条件
学习目标
这一节,我们从 基础知识、简单实践、小结 三个方面来学习
基础知识
简介
在awk中有一种简单的条件控制语法switch,相较于if来说,switch分支语句功能较弱,只能进行等值比较或正则匹配,一般结合case方式来使用。
语法格式
switch (表达式) {
case 值1|regex1 : 执行语句1;break
case 值2|regex2 : 执行语句2;break
case 值3|regex3 : 执行语句3;break
...
[ default: 执行语句 ]
}
注意:
表达式的结果符合awk的逻辑运算,表达式成功返回0,表达式失败返回1
因为switch本身外侧没有流程控制,所以,一般情况下,当外侧没有循环控制的时候,会结合break来使用
一旦遇到break,代表退出当前循环
简单实践
实践1-简单实践
无break效果
[root@localhost ~]# seq 2 | awk '{switch ($1 % 2) {
case "1":
print "奇数: ", $1
case "0":
print "偶数: ", $1
default:
print "嘿嘿"
}}'
奇数: 1
偶数: 1
嘿嘿
偶数: 2
嘿嘿
结果显示:
没有break的时候,每一次都会走一个switch的完整循环
结合break的基本语法实践
[root@localhost ~]# seq 5 | awk '{switch ($1 % 2) {
case "1":
print "奇数: ", $1
break
case "0":
print "偶数: ", $1
break
default:
print "嘿嘿"
break
}}'
奇数: 1
偶数: 2
奇数: 3
偶数: 4
奇数: 5
结果显示:
有了break效果好多了
实践2-结合文本来进行实践
[root@localhost ~]# awk '{switch (NR % 2) {
case "1":
print "奇数行: ", $0
break
case "0":
print "偶数行: ", $0
break
}}' awk.txt
奇数行: nihao awk1 awk2 awk3
偶数行: nihao awk4 awk5 awk6
奇数行: nihao awk7 awk8 awk9
定制配置考试成果表
[root@localhost ~]# cat course_scores.txt
姓名 语文 数据 历史
张三 100 56 99
李四 90 68 89
王五 50 78 67
赵六 80 99 89
[root@localhost ~]# awk -v total=0 '
BEGIN{
printf "\t学生成绩信息统计\n"
printf "-----------------------------------\n"
}
NR>=2 {switch ($2+$3+$4 >= 240) {
case 0:
type="优秀";break
case 1:
type="良好";break
}
total=$2+$3+$4
printf "姓名: %-3s 总分: %4d,状态: %-2s\n",$1,$2+$3+$4,type
}' course_scores.txt
学生成绩信息统计
-----------------------------------
姓名: 张三 总分: 255,状态: 良好
姓名: 李四 总分: 247,状态: 良好
姓名: 王五 总分: 195,状态: 优秀
姓名: 赵六 总分: 268,状态: 良好