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