• 本页内容

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,