awk流程控制

awk 中if和for while

一、awk嵌套if判断语句

格式如下:

if(表达式)

{语句1}

else if(表达式)

{语句2}

else

{语句3}

如果if后边的语句块是的单个语句,{}可以不用写,如果是多条语句,必须用{}括起来,表示它们都属于一个if的执行语句

格式:

if(表达式)

{语句1;语句2;语句3;}

例子1:

[root@centos-1 ~]# vi a

#!/bin/bash

awk -F: '{

if ($1 == "root")

    {

     print "这是超级用户";

    }

else

    {

     print "这是普通用户";

    }

}' /etc/passwd

 

执行结果

[root@centos-1 ~]# sh a

这是超级用户

这是普通用户

这是普通用户

这是普通用户

这是普通用户

 

 

 

二、多if嵌套

 

例子:

#!/bin/bash

awk -F: '{

if ($NF == "/sbin/nologin" )

     {

      if ( $1 == "adm")

        {

                print "benet"

        }

      if ( $1 == "ftp")

        {

                print "accp"

        }

     }

}' /etc/passwd

 

 

三、awk中的for循环

格式1:

for (i in 取值列表)

{执行语句}

 

格式2:

for (变量;循环条件;表达式)

{执行语句}

 

如果for后边的语句块是的单个语句,{}可以不用写,如果是多条语句,必须用{}括起来,表示它们都属于一个for循环的执行语句

格式:

for (变量;循环条件;表达式)

{执行语句1;执行语句2;执行语句3}

 

例子1:动作没有用{}扩起来。用;结束动作语句。

 

awk 'BEGIN{a=0;for(i=0;i<=100;i++)a+=i;print a}'

5050

a+=1;  :这里的分号表示for的一个结束点,a+=i属于for的执行语句。而print a结束后才执行

如果将{a+=i;print a}用大括号括起来就是另外一个意思了。这两句都都是for的执行语句了。

结果如下:

[root@localhost ~]# awk 'BEGIN{a=0;for(i=0;i<=100;i++){a+=i;print a}}'
0
1

............

............

4851
4950
5050

 

例子2:动作用{}括起来,没有用;结束

#!/bin/bash

awk 'BEGIN{

    {a=0}

    for (i=0;i<=100;i++)

    {a+=i}

    print a

}'

这对大括号说明里边的所有动作都在BEGIN当中的。

注意:上述的两个例子都是在BEGIN中执行的。因为我们是在BEGIN{}里边执行的动作

也就是说,我们在用awk计算的时候,直接在BEGIN{}部分中就可以完成

 

例子:

[root@centos-1 ~]# awk 'BEGIN{a=1;b=2;print (a+b)}'

3

原文地址:https://www.cnblogs.com/pangbing/p/6955712.html