|
一、awk流程控制语句
在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。
awk中,流程控制语句,语法结构,与c语言类似有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。
1、条件判断语句
布尔条件表达式? if-true-exp: if-false-exp
[root@Node5 ~]# awk -v num1=11 -v num2=22 'BEGIN{num1>num2?max=num1: max=num2; print max}'
22
另一种用法:
语法:if(condition){then-body}else if{then-body}else{else-body}
例子:
# awk -F:'{if ($3==0) {print $1, "Adminitrator";} else { print $1,"Common User"}}' /etc/passwd
awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd
awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd
awk -F: -v sum=0 '{if ($3>=500) sum++}END{print sum}' /etc/passwd
# 单分支·
[root@Node5 ~]# awk -F: '{if ($3==0) {print $1, "Adminitrator"}}' /etc/passwd
root Adminitrator
# 双分支
[root@Node5 ~]# awk -F: '{if ($3==0) {print $1, "Adminitrator";} else { print $1,"Common User"}}' /etc/passwd
root Adminitrator
bin Common User
daemon Common User
adm Common User
lp Common User
sync Common User
shutdown Common User
halt Common User
mail Common User
uucp Common User
operator Common User
games Common User
gopher Common User
ftp Common User
nobody Common User
dbus Common User
rpc Common User
vcsa Common User
abrt Common User
saslauth Common User
postfix Common User
rpcuser Common User
nfsnobody Common User
haldaemon Common User
ntp Common User
sshd Common User
tcpdump Common User
oprofile Common User
avahi-autoipd Common User
rtkit Common User
pulse Common User
gdm Common User
# 多分支
[root@Node5 ~]# awk -F: '{if($3==0){print $1,"Adminitrator"}else if($3==500){print $1,"sb User"}else{print $1,"command user"}}' /etc/passwd
root Adminitrator
bin command user
daemon command user
adm command user
lp command user
sync command user
shutdown command user
halt command user
mail command user
uucp command user
operator command user
games command user
gopher command user
ftp command user
nobody command user
dbus command user
rpc command user
vcsa command user
abrt command user
saslauth command user
postfix command user
rpcuser command user
nfsnobody command user
haldaemon command user
ntp command user
sshd command user
tcpdump command user
oprofile command user
avahi-autoipd command user
rtkit command user
pulse command user
gdm command user
xj sb User
[root@Node5 ~]#
使用awk求符合条件列的个数及和:
[root@Node5 ~]# awk -F: '{if ($3>=500) print $3 }' /etc/passwd
65534
500
[root@Node5 ~]# awk -F: -v sum=0 '{if ($3>=500) sum++}END{print sum}' /etc/passwd
2
[root@Node5 ~]# awk -F: -v sum=0 '{if ($3>=500) sum+=$3}END{print sum}' /etc/passwd
66034 # 使用awk求符合条件列的和
2、case语句
语法:switch (expression) {case VALUE or /RGEEXP/: statement1;... default: stementN}
awk中很少使用case语句,就放这里了
3、循环语句
注意:这里指的循环是在字段间循环,不是行;awk自动读取每一行然后在各字段间循环
while
语法:while (condition){statement1; statment2; ...}
例子:
awk -F: '{i=1;while (i |
|
|