70. if-else 语句
在 awk if-else
语句中,您还可以提供条件为
false
时要执行的操作列表。
在以下语法中,如果条件为真,则执行操作 1,如果条件为假,则执行操作 2。
语法:
if (conditional-expression)
action1
else
action2
Awk 还有一个条件运算符,即 "三元运算符"
( ?:
),其工作方式与 C 中的等效运算符类似。
就像在 if-else
语句中一样,如果条件表达式为
true
,则执行 action1
,如果条件表达式为
false
,则执行 action2
。
三元运算符语法:
conditional-expression ? action1 : action2 ;
以下示例在总数量 <= 5 时显示消息 "Buy More"
,并在总数量不 <=5 时打印 "Sell More"
。
$ cat if-else.awk
BEGIN {
FS=",";
}
{
if ( $5 <= 5 )
print "Buy More: Order", $2, "immediately!"
else
print "Sell More: Give discount on", $2, "immediately!"
}
$ awk -f if-else.awk items.txt
Sell More: Give discount on HD Camcorder immediately!
Buy More: Order Refrigerator immediately!
Sell More: Give discount on MP3 Player immediately!
Sell More: Give discount on Tennis Racket immediately!
Buy More: Order Laser Printer immediately!
以下示例使用三元运算符连接 items.txt
文件中的每 2 行,并在其间使用逗号。
我们之前讨论了 awk
ORS
(输出记录分隔符)内置变量。
在此示例中,
ORS
的值在逗号和换行符之间来回更改。
当行号与 2 取余 NR % 2
产生余数时(即奇数行),
ORS
设置为逗号,否则它是一个换行符。
因此,第 1 行和第 2 行合并并作为单行打印,第 3 行和第 4 行合并并作为单行打印,第 5 行单独打印,带有逗号且没有换行符。
打印串联的记录对:
$ awk 'ORS=NR%2?",":"\n"' items.txt
101,HD Camcorder,Video,210,10,102,Refrigerator,Appliance,850,2
103,MP3 Player,Audio,270,15,104,Tennis Racket,Sports,190,20
105,Laser Printer,Office,475,5,