Linux的awk 中的while do-while for循环
linux awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。 awk中,流程控制语句,语法结构,与c语言类型。下面是各个语句用法。
一.条件判断语句(if)
if(表达式) #if ( Variable in Array ) 语句1 else 语句2
格式中"语句1"可以是多个语句,如果你为了方便Unix awk判断也方便你自已阅读,你最好将多个语句用{}括起来。Unix awk分枝结构允许嵌套,其格式为:
if(表达式)
{语句1}
else if(表达式) {语句2} else {语句3}
[chengmo@localhost nginx]# awk 'BEGIN{ test=100; if(test>90) { print "very good"; } else if(test>60) { print "good"; } else { print "no pass"; } }'
very good
每条命令语句后面可以用“;”号结尾。
二.循环语句(while,for,do)
1.while语句
格式:
while(表达式)
{语句}
例子:
[chengmo@localhost nginx]# awk 'BEGIN{ test=100; total=0; while(i<=test) { total+=i; i++; } print total; }' 5050
2.for 循环
for循环有两种格式:
格式1:
for(变量 in 数组)
{语句}
例子:
[chengmo@localhost nginx]# awk 'BEGIN{ for(k in ENVIRON) { print k"="ENVIRON[k]; } }'
AWKPATH=.:/usr/share/awk OLDPWD=/home/web97 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SELINUX_LEVEL_REQUESTED= SELINUX_ROLE_REQUESTED= LANG=zh_CN.GB2312
。。。。。。
说明:ENVIRON 是awk常量,是子典型数组。
格式2:
for(变量;条件;表达式)
{语句}
例子:
[chengmo@localhost nginx]# awk 'BEGIN{ total=0; for(i=0;i<=100;i++) { total+=i; } print total; }'
5050
3.do循环
格式:
do
{语句}while(条件)
例子:
[chengmo@localhost nginx]# awk 'BEGIN{ total=0; i=0; do { total+=i; i++; }while(i<=100) print total; }' 5050
以上为awk流程控制语句,从语法上面大家可以看到,与c语言是一样的。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。
| break | 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 |
| continue | 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 |
| next | 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。 |
| exit | 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。 |
三、性能比较
[chengmo@localhost nginx]# time (awk 'BEGIN{ total=0;for(i=0;i<=10000;i++){total+=i;}print total;}') 50005000
real 0m0.003s user 0m0.003s sys 0m0.000s [chengmo@localhost nginx]# time(total=0;for i in $(seq 10000);do total=$(($total+i));done;echo $total;) 50005000
real 0m0.141s user 0m0.125s sys 0m0.008s
实现相同功能,可以看到awk实现的性能是shell的50倍!
Linux的awk 中的while do-while for循环的更多相关文章
- Linux shell awk中print及变量使用
Linux处理文本工具 grep: 过滤文本内容 sed: 编辑文本内容 awk: 显示文本 awk: Aho Peter Weinberger Kerni ...
- Linux里AWK中split函数的用法
跟java里的split函数的用法是很相像的,举例如下: The awk function split(s,a,sep) splits a string s into an awk array a u ...
- Linux shell awk中printf使用
printf 是 awk 的重要格式化输出命令 printf格式化输出内容 格式: printf format,item1,item2... 要点: 1,printf输出时要指定格式f ...
- linux awk 中 RS,ORS,FS,OFS 区别与联系【转】
linux awk 中 RS,ORS,FS,OFS 区别与联系 http://blog.csdn.net/jesseen/article/details/7992929
- linux运维中的命令梳理(三)
----------文本操作命令---------- sed命令:文本编辑工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特 ...
- Awk中调用shell命令
Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...
- linux之awk
相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理. 因此,awk 相当的适合处理小型的数据数据处理呢! awk 通常运作的模式是这样的: [root@linu ...
- linux shell awk 流程控制语句(if,for,while,do)详细介绍
在linux awk的 while.do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出.break中断当前正在执行的循环并跳到循环 ...
- 转摘Linux命令工作中常用总结
Linux命令工作中常用总结 1. 搜索 在vi和vim中如果打开一个很大的文件,不容易找到对应的内容,可以使用自带的搜索关键字进行搜索定位: 在vi和vim界面中输入:"/" ...
随机推荐
- 求数值的n次方根
二分法 float SqrtByBisection(float n) //用二分法 { if(n<0) //小于0的按照你需要的处理 return n; float mid,last; floa ...
- Memcached集群实现及原理介绍
一.Memcached集群介绍 1.自身通过算法保证数据唯一性2.集群形式对用户和Memcached都是透明的3.Memcached的集群是通过客户端实现的4.Memcached服务端相互不认识 二. ...
- idea查看接口或类的所有方法
第一种: 显示结果: 第二种: 点击左显示栏的Structure: 第三种:ctrl+f12,有的电脑可能需要加fn键
- Lnamp的高级网站架构+动静分离+反向代理
Lnamp的架构 环境: 图上面是5台服务器 192.168.1.116 是nginx负载均衡+动静分离 192.168.1.117:linux+apache+php 192.168.1.118:li ...
- [学习笔记] 在Eclipse中添加用户库 Add User Libraries ,在项目中引用用户库
如果还没有安装Eclipse, 则请参考前文: [学习笔记] 下载.安装.启动 Eclipse(OEPE) 添加用户库 本文主要介绍在项目中直接使用第三方库的情况.就是把第三方的jar文件直接放到某 ...
- IdentityServer4 学习一
网上找的关于IdentityServer4的百度脑图 http://naotu.baidu.com/file/75b251257ce27cfa62e0ad7f47b75576?token=e2db61 ...
- Spring AOP 简介(三)
Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...
- Oracle10G安装手册
环境准备: 操作系统:windows-7 32bit 数据库:oracle10G 网络环境:不能使用DHCP模式,必须设置一个固定IP地址. 运行安装 1.打开oracle安装文件,请勿直接选择set ...
- C/C++内存知识(一)
一.C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap)- 由程序 ...
- 二、点亮LED
接着上一章,本章来实现控制LED的亮灭操作: 一.驱动框架 #include <linux/fs.h> #include <linux/init.h> /* 定义文件内私有结构 ...