控制语句
Awk为选择提供了一个 if-else 语句,以及为循环提供了几个语句,效仿C语言中对应的控制语句,仅可以在动作中使用。
if-else语句
$2 > 6 { n = n + 1; pay = pay + $2 * $3 }
END { if (n > 0)
print n, "employees, total pay is", pay,
"average pay is", pay/n
else
print "no employees are paid more than $6/hour"
}if-else 语句中,if 后的条件会被计算。如果为真,执行第一个 print 语句。否则,执行第二个 print 语句。
注意我们可以使用一个逗号将一个长语句截断为多行来书写。
while语句
一个 while 语句有一个条件和一个执行体。条件为真时执行体中的语句会被重复执行。这个程序使用公式 value=amount(1+rate)years来演示以特定的利率投资一定量的钱,其数值是如何随着年数增长的。
# interest1 - 计算复利
# 输入: 钱数 利率 年数
# 输出: 复利值
{ i = 1
while (i <= $3) {
printf("\t%.2f\n", $1 * (1 + $2) ^ i)
i = i + 1
}
}条件是 while 后括弧包围的表达式;
循环体是条件后大括号包围的两个表达式。
printf 规格字符串中的 \t 代表制表符; ^ 是指数操作符。从
#开始到行尾的文本是注释,会被awk忽略,但能帮助程序的读者理解程序做的事情。
for语句
另一个语句, for ,将大多数循环都包含的初始化、测试、以及自增压缩成一行。如下是之前利息计算的 for 版本::
# interest1 - 计算复利
# 输入: 钱数 利率 年数
# 输出: 每年末的复利
{ for (i = 1; i <= $3; i = i + 1)
printf("\t%.2f\n", $1 * (1 + $2) ^ i)
}初始化 i = 1 只执行一次。接下来,测试条件 i <= $3 ;如果为真,则执行循环体的 printf 语句。循环体执行结束后执行自增 i = i + 1 ,接着由另一次条件测试开始下一个循环迭代。代码更加紧凑,并且由于循环体仅是一条语句,所以不需要大括号来包围它。
最后更新于
这有帮助吗?