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