awk

If Else Statement

在awk if Else语句里,如果条件为假,你也可以提供一个动作列表来执行。在下面的语法里,如果条件为真action1将被执行,如果条件为假 action2将被执行。

语法:
if (condotional-expression)
    action1
else
    action2

awk还有一个条件操作符 三元操作符(?:),它的工作方式类似于C 就像if-else语句,如果条件表达式是真,action1将被执行,如果条件表达式是假,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文件将每两行连接起来,中间用逗号隔开。

早前我们讨论过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,