本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。
gawk 编程语言支持常见的结构化编程命令。本节将会介绍这些命令,并演示如何在 gawk 编程环境中使用它们。
if语句
gawk 编程语言支持标准的 if-then-else
格式的 if
语句。你必须为 if
语句定义一个求值的条件,并将其用圆括号括起来。如果条件求值为 TRUE
,紧跟在 if
语句后的语句会执行。如果条件求值为 FALSE
,这条语句就会被跳过。可以用这种格式:
if (condition)
statement1
也可以将它放在一行上,像这样:
if (condition) statement1
下面这个简单的例子演示了这种格式的。
$ cat test5.txt
10
5
13
50
34
$ gawk '{if ($1 > 20) print $1}' test5.txt
50
34
并不复杂。如果需要在 if
语句中执行多条语句,就必须用花括号将它们括起来。
$ gawk '{
> if ($1 > 20){
> result=$1*2;
> print result;
> }}' test5.txt
100
68
gawk 的 if
语句也支持 else
子句,允许在 if
语句条件不成立的情况下执行一条或多条语句。这里有个使用 else
子句的例子。
$ gawk '{
> if ($1 > 20){
> print $1/2;
> }
> else
> {
> print $1*2;
> }
> }' test5.txt
20
10
26
25
17
可以在单行上使用 else
子句,但必须在 if
语句部分之后使用分号。
if (condition) statement1; else statement2
以下是上一个例子的单行格式版本。
$ gawk '{if ($1 > 20) print $1 / 2; else print $1 * 2}' test5.txt
20
10
26
25
17
这个格式更紧凑,但也更难理解。
while语句
while
语句为 gawk 程序提供了一个基本的循环功能。下面是 while
语句的格式。
while (condition)
{
statements
}
while
循环允许遍历一组数据,并检查迭代的结束条件。如果在计算中必须使用每条记录中的多个数据值,这个功能能帮得上忙。
$ cat test6.txt
130 120 135
160 113 140
145 170 215
$ gawk '{
> total = 0;
> i = 1;
> while ( i < 4 ){
> total += $i;
> i++;
> }
> avg = total / 3;
> print "Average:",avg;
> }' test6.txt
Average: 128.333
Average: 137.667
Average: 176.667
while
语句会遍历记录中的数据字段,将每个值都加到 total
变量上,并将计数器变量 i
增值。当计数器值等于 4
时,while
的条件变成了 FALSE
,循环结束,然后执行脚本中的下一条语句。这条语句会计算并打印出平均值。这个过程会在数据文件中的每条记录上不断重复。
gawk 编程语言支持在 while
循环中使用 break
语句和 continue
语句,允许你从循环中跳出。
$ gawk '{
> total = 0;
> i = 1;
> while (i < 4){
> total += $i
> if (i == 2) break;
> i++;
> }
> avg = total / 2;
> print "Average of the first two data:",avg;
> }' test6.txt
Average of the first two data: 125
Average of the first two data: 136.5
Average of the first two data: 157.5
do-while语句
do-while
语句类似于 while
语句,但会在检查条件语句之前执行命令。下面是 do-while
语句的格式。
do
{
statements
} while (condition)
这种格式保证了语句会在条件被求值之前至少执行一次。当需要在求值条件前执行语句时,这个特性非常方便。
$ gawk '{
> total = 0;
> i = 1;
> do{
> total += $i;
> i++;
> } while (total < 150)
> print total }' test6.txt
250
160
315
这个脚本会读取每条记录的数据字段并将它们加在一起,直到累加结果达到 150
。如果第一个数据字段大于 150
(就像在第二条记录中看到的那样),则脚本会保证在条件被求值前至少读取第一个数据字段的内容。
for语句
for
语句是许多编程语言执行循环的常见方法。 gawk编程语言支持 C 风格的 for
循环。
for( variable assignment; condition; iteration process)
将多个功能合并到一个语句有助于简化循环。
$ gawk '{
> total = 0;
> for (i = 1; i < 4; i++){
> total += $i;
> }
> avg = total / 3;
> print "Average:", avg;
> }' test6.txt
Average: 128.333
Average: 137.667
Average: 176.667
定义了 for
循环中的迭代计数器,你就不用担心要像使用 while
语句一样自己负责给计数器增值了。
评论区