declare begin end 中if怎么写_Linux三剑客awk命令篇四:流程控制语句(if,for,while,do)

Linux三剑客awk命令篇四:流程控制语句(if,for,while,do)

关于awk的原理等基本知识请参考上三篇:

Linux三剑客awk命令篇一之原理及基本命令

Linux三剑客awk命令篇二之命令操作符

Linux三剑客awk命令篇三之内部变量

补充,流程控制请跳2

1、语法格式:

(1) Awk完整语法

awk 'BEGIN{commands} pattern{commands}END{commands} ' file

BEGIN{commands}:处理数据前执行的命令。

END{commands}:处理完数据后执行的命令。

这两个命令可以省略。见(2)

(2) Awk基本语法

awk -F '分割符' '/模式/{动作} ' file

这里的'/模式/{动作} '类似于sed的命令格式。

模式:

(1) 正则表达式(注意格式:/正则表达式/)

(2) 条件表达式(例如:>

总结:

这里的模式通俗来讲是用来找谁,而动作表示是干啥。

2、 awk流程控制语句if,for,while,do

补充:

在awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。与shell类似。

(1) if

格式:

if(表达式)

{

语句1

}

else if(表达式)

{

语句2

}

else

{

语句3

}

案例:

#!/bin/bash

#awk if 测试

#auth:odysee

awk 'BEGIN{

score=99;

if(score>90)

{

print "优秀";

}

else if(score>60)

{

print "良好";

}

else

{

print "不及格"

}

}'

8cfb1a343b65760259bbe1c95691a1f7.png

执行

ac06efeffb914c7ce396a49f11d9fcc3.png

(2) for

格式1:

for(变量 in 数组)

{

语句

}

格式2:

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

{

语句

}

案例1:

补充:

ENVIRON数组,里面存放的是系统环境变量。

它的下标是环境变量的名,元素是对应环境变量的值。

#!/bin/bash

#awk的for测试

#auth:odysee

awk 'BEGIN{

for(i in ENVIRON)

{

print i"="ENVIRON[i];

}

}'

48c3b1dbdd36eda8e9aecaabd49fc791.png

执行脚本

fb10631d85d04509d112f5d7b55bc17d.png

案例2:

#!/bin/bash

#awk的for测试

#auth:odysee

awk 'BEGIN{

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

{

print i;

}

}'

f1ca688439dd63cb4798785fa925c14f.png

执行脚本

2c75c0dd5c9bc31e7a6d887ed239e827.png

(3) while

while(表达式)

{

语句

}

案例:

#!/bin/bash

#awk的while测试

#auth:odysee

count=0;

awk 'BEGIN{

while(count <= 10)

{

count++;

print count;

}

}'

88bd0fef97cb0392e5ce1f5b96995920.png

执行脚本

27f0a1b058a14cbd9b2c98356f0c326b.png

(4) do

格式:

do

{

语句

}while(条件)

案例:

#!/bin/bash

#测试awk的do,简单的计算从1+...10

#auth:odysee

awk 'BEGIN{

total=0;

i=0;

do

{

total+=i;

i++;

}while(i<=100)

print total;

}'

~

ca0789b09f12122b0e4d9b0cb5e66fd1.png

执行脚本

1dac7a77d7b1f8c7e484295d1e435cde.png

3、 性能比较

文章最后我们来比较一下shell与awk的性能

odysee:~/shellFiles_1$time (awk 'BEGIN{ total=0;for(i=0;i<=10000000;i++){total+=i;}print total;}')

50000005000000

real0m0.862s

user0m0.858s

sys0m0.000s

odysee:~/shellFiles_1$ time(total=0;for i in $(seq 10000000);do total=$(($total+i));done;echo $total;)

50000005000000

real1m24.775s

user1m22.525s

sys0m1.905s

odysee:~/shellFiles_1$

dd265642efdc18358095439a6739bec7.png

结果很明显了,awk完胜。

下一篇:

Linux三剑客awk命令篇五之引用shell变量

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值