4 Awk If 语句示例(if、if else、if else if、)

举报
Tiamo_T 发表于 2022/02/01 11:03:44 2022/02/01
【摘要】 在本 awk 教程中,让我们通过实际示例了解awk 条件 if 语句。awk 支持很多条件语句来控制程序的流程。大多数 Awk 条件语句语法看起来像“C”编程语言。通常条件语句在执行任何操作之前检查条件。如果条件为真,则执行动作。如果条件为假,则可以执行类似的操作。条件语句以名为“if”的关键字开头。awk 支持两种不同的 if 语句。awk 简单的 if 语句awk If-Else 语句a...

在本 awk 教程中,让我们通过实际示例了解awk 条件 if 语句

awk 支持很多条件语句来控制程序的流程。大多数 Awk 条件语句语法看起来像“C”编程语言。

通常条件语句在执行任何操作之前检查条件。如果条件为真,则执行动作。如果条件为假,则可以执行类似的操作。

条件语句以名为“if”的关键字开头。awk 支持两种不同的 if 语句。

  1. awk 简单的 if 语句
  2. awk If-Else 语句
  3. awk If-ElseIf-Ladder

awk 简单的 if 语句

单一动作:简单的If语句用于检查条件,如果条件返回真,则执行相应的动作。

Syntax:
if (conditional-expression)
	action
  • if 是关键字
  • 条件表达式——检查条件的表达式
  • action - 任何执行操作的 awk 语句。

多重动作:如果条件表达式返回真,那么将执行动作。如果需要执行多个操作,则应将这些操作括在花括号中,并将它们分隔成一个新行或分号,如下所示。


Syntax:
if (conditional-expression)
{
	action1;
	action2;
}

如果条件为真,则括号中的所有操作都将按照给定的顺序执行。执行完所有操作后,它会继续执行下一条语句。

awk if else 语句

在上述简单的 awk If 语句中,如果条件为假,则没有任何操作集。在 awk If Else 语句中,您可以给出条件为假时要执行的操作列表。如果条件返回 true,则执行 action1,如果条件为 false,则执行 action 2。

Syntax:
if (conditional-expression)
	action1
else
	action2

awk 也有条件运算符,即三元运算符(?:),其功能类似于 awk If Else 语句。如果条件表达式为真,则执行 action1,如果条件表达式为假,则执行 action2。

Syntax:

conditional-expression ? action1 : action2 ;

awk If Else If 阶梯

if(conditional-expression1)
	action1;
else if(conditional-expression2)
	action2;
else if(conditional-expression3)
	action3;
	.
	.
else
	action n;
  • 如果条件表达式 1 为真,则将执行 action1。
  • 如果条件表达式 1 为假,则将检查条件表达式 2,如果为真,则执行动作 2 并像这样继续。如果条件表达式都不为真,则将执行最后一个 else 部分。

现在让我们创建包含学生分数的示例输入文件。

$cat student-marks
Jones 2143 78 84 77
Gondrol 2321 56 58 45
RinRao 2122 38 37
Edwin 2537 87 97 95
Dayan 2415 30 47

1. awk If 示例:检查所有标记是否存在

$ awk '{
if ($3 =="" || $4 == "" || $5 == "")
	print "Some score for the student",$1,"is missing";'
}' student-marks
Some score for the student RinRao is missing
Some score for the student Dayan is missing

3 美元、4 美元和 5 美元是学生的考试成绩。如果测试分数等于空,则抛出该消息。|| 操作员是检查任何一个标记不存在,它应该警报。

2. Awk If Else 示例:根据每个科目的学生分数生成通过/失败报告

$ awk '{
if ($3 >=35 && $4 >= 35 && $5 >= 35)
	print $0,"=>","Pass";
else
	print $0,"=>","Fail";
}' student-marks
Jones 2143 78 84 77 => Pass
Gondrol 2321 56 58 45 => Pass
RinRao 2122 38 37 => Fail
Edwin 2537 87 97 95 => Pass
Dayan 2415 30 47 => Fail

Pass 的条件是所有的测试分数应该大于或等于 35。所以如果大于 35 则检查所有测试分数,然后打印整行和字符串“Pass”,否则即即使任何一个测试分数不满足条件,打印整行并打印字符串“Fail”。

3. Awk If Else If 示例:找出每个学生的平均成绩和成绩

$ cat grade.awk
{
total=$3+$4+$5;
avg=total/3;
if ( avg >= 90 ) grade="A";
else if ( avg >= 80) grade ="B";
else if (avg >= 70) grade ="C";
else grade="D";

print $0,"=>",grade;
}
$ awk -f grade.awk student-marks
Jones 2143 78 84 77 => C
Gondrol 2321 56 58 45 => D
RinRao 2122 38 37 => D
Edwin 2537 87 97 95 => A
Dayan 2415 30 47 => D

在上面的 awk 脚本中,名为 'avg' 的变量具有三个测试分数的平均值。如果平均分大于或等于90,则为A,如果平均大于或等于80,则为B,如果平均大于或等于70,则为C。或否则等级为 D。

4. awk 三进制 (?:) 示例:用逗号连接每 3 行输入。

$ awk 'ORS=NR%3?",":"\n"' student-marks
Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37
Edwin 2537 87 97 95,Dayan 2415 30 47,

在获得输出的每一行之后都会附加此变量。在此示例中,它在每 3 行从逗号更改为换行符。第 1、2 行是逗号,第 3 行是换行符,第 4、5 行是逗号,第 6 行是换行符,依此类推。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。