Awk基本入门[4] Awk Conditional Statements and Loops

1、Simple If Statement


语法:

if (conditional-expression)
action

如果是多个action,则语法如下:

if (conditional-expression)
{
action1;
action2;
}

Print all the items with quantity <=5:

$ awk -F "," '{ if ($5 <= 5) \
print "Only",$5,"qty of",$2, "is available"; }' \
items.txt
Only 2 qty of Refrigerator is available
Only 5 qty of Laser Printer is available

2、If Else Statement


语法:

if (conditional-expression)
    action1
else
    action2

该语法与三元运算符类似:

conditional-expression ? action1 : action2 ;

The following example displays the message "Buy More" when the total quantity is <= 5, and prints "Sell More" when the total quantity is not <=5.

$ 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!

3、While Loop


语法:

while(condition)
    actions

示例:打印50个字符“x”

$ awk 'BEGIN \
{ while (count++<50) string=string "x"; print string }'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4、Do-While Loop


语法:

do
    action
while(condition)

The following awk program prints the total number of quantities sold from the items-sold.txt file for each item. The output of this program is exactly the same as the while.awk program, but this uses do-while.

$ cat dowhile.awk
{
i=2; total=0;
do
{
total = total + $i;
i++;
} while (i <= NF)
print "Item", $1, ":", total, "quantities sold";
}
$ awk -f dowhile.awk items-sold.txt
Item 101 : 47 quantities sold
Item 102 : 10 quantities sold
Item 103 : 65 quantities sold
Item 104 : 20 quantities sold
Item 105 : 42 quantities sold

5、For Loop Statement


语法:

for(initialization;condition;increment/decrement)
    actions

The following example prints the sum of fields in a line. Initially the variable i is initialized to 1; if i is less than or equal to the total number of fields, the  urrent field is added to the total; I is incremented and the test is repeated.

$ echo "1 2 3 4" | awk \
'{ for (i = 1; i <= NF; i++) total = total+$i }; \
END { print total }'
10

6、Break Statement


The break statement is used for jumping out of the innermost loop (while, do-while, or for loop) that encloses it. Please note that the break statement has meaning only if you use it with in the loop.

The following example prints any item number that has a month with no sold items, i.e. that has 0 for any one of the values field2 through field7.

$ cat break.awk
{
  i=2; total=0;
  while (i++ <= NF)
    if ($i == 0) {
      print "Item", $1, "had a month with no item sold"
      break;
    }
}
$ awk -f break.awk items-sold.txt
Item 102 had a month with no item sold
Item 104 had a month with no item sold

7、Continue Statement


The continue statement skips over the rest of the loop body causing the next cycle around the loop to begin immediately. Please note that the continue statement has meaning only if you use it with in the loop.

The following awk script prints the value of x at each iteration except the 5th, where a continue statement skips the printing.

$ awk 'BEGIN{
    x=1;
    while(x<=10)
    {
      if(x==5){
        x++;
        continue;
      }
    print "Value of x",x;x++;
    }
}'

The above command produces the following output.

Value of x 1
Value of x 2
Value of x 3
Value of x 4
Value of x 6
Value of x 7
Value of x 8
Value of x 9
Value of x 10

8、Exit Statement


The exit statement causes the script to immediately stop executing the current commands, and also ignores the remaining lines from the input file.

The following example prints the first item number that has a month when no items were sold. This is similar to the break.awk example, except that it exits  when it finds a month with no sales for an item, rather than going on to look at the other items.

$ cat exit.awk
{
  i=2; total=0;
  while (i++ <= NF)
    if ($i == 0) {
      print "Item", $1, "had a month with no item sold"
      exit;
    }
}
$ awk -f exit.awk items-sold.txt
Item 102 had a month with no item sold

Note: Item 104 also had a month with no item sold. But, it was not displayed above, as we used exit in the while loop.

 

 

 

 

 

 

 

posted @ 2013-06-28 18:53  风*依旧  阅读(399)  评论(0编辑  收藏  举报