shell文本过滤编程(六):awk之循环判断及数组
2014-08-27 17:44
519 查看
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
与上一节printf一样,awk的循环判断和C语言的循环判断语法极其类似。
1、 While循环
首先,将输出记录分隔符 ORS 设置成 ""(空),它将使 print 语句在每个调用结尾不输出新行。这意味着如果希望任何文本从新的一行开始,那么需要明确写入 print "\n"。
在代码中,设置变量i来存储当前中处理字段编号,对每一行记录,i首先设置为0,然后对每一字段打印一个“*”,每一行记录打印完之后打印一个换行,由于将 ORS 设置成 "",print将不输出2个换行。下面为打印结果:
2、 do…while循环
awk 还有"do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值。
示例(输出六个*号):
与一般的 while 循环不同,由于在代码块之后对条件求值,"do...while" 循环永远都至少执行一次。
换句话说,当第一次遇到普通 while 循环时,如果条件为假,将永远不执行该循环。
3、 for循环
awk 允许创建 for 循环,它就象 while 循环,也等同于 C 语言的 for 循环:
示例(同样连续输出5个*):
使用过C语言的会发现,Awk的循环操作和C语言的循环操作语法极其类似。
Awk也支持数组,数组使用前,不必定义,也不必指定数组元素个数。经常使用循环来访问数组。下面是一种循环类型的基本结构:
For (element inarray ) print array[element]
示例:
示例:
输出结果为:
与上一节printf一样,awk的循环判断和C语言的循环判断语法极其类似。
1、 While循环
#!/bin/sh awk ' BEGIN { ORS="" } { i=0 while (i < NF) { printf("* ") i++ } print "\n" } ' group_file1
首先,将输出记录分隔符 ORS 设置成 ""(空),它将使 print 语句在每个调用结尾不输出新行。这意味着如果希望任何文本从新的一行开始,那么需要明确写入 print "\n"。
在代码中,设置变量i来存储当前中处理字段编号,对每一行记录,i首先设置为0,然后对每一字段打印一个“*”,每一行记录打印完之后打印一个换行,由于将 ORS 设置成 "",print将不输出2个换行。下面为打印结果:
#./7_awk_while.sh * * * * * * * * * * * * * * * * #
2、 do…while循环
awk 还有"do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值。
示例(输出六个*号):
#!/bin/sh echo "" | awk ' { i=0 do { printf("* ") }while (i++ < 5) printf("\n") }'
与一般的 while 循环不同,由于在代码块之后对条件求值,"do...while" 循环永远都至少执行一次。
换句话说,当第一次遇到普通 while 循环时,如果条件为假,将永远不执行该循环。
3、 for循环
awk 允许创建 for 循环,它就象 while 循环,也等同于 C 语言的 for 循环:
for ( initial assignment; comparison; increment ) { code block }
示例(同样连续输出5个*):
#!/bin/sh echo"" | awk ' { for (i=0; i<5; i++) { printf("* ") } printf("\n") }'
使用过C语言的会发现,Awk的循环操作和C语言的循环操作语法极其类似。
Awk也支持数组,数组使用前,不必定义,也不必指定数组元素个数。经常使用循环来访问数组。下面是一种循环类型的基本结构:
For (element inarray ) print array[element]
示例:
#!/bin/sh echo"" | awk ' BEGIN { a[1]="123" a[2]="456" a[3]="789" } END{ for(i in a) { print a[i] } }'Awk数组的下标还可以使用字符串。awk 将 arr["1"] 和 arr[1] 看作同一个元素。
示例:
#!/bin/sh echo"" | awk ' BEGIN { a[1]="123" a[2]="456" a[3]="789" a["hello"]="awk" a["3"]="world" } { for(i in a) { print a[i] } } END { print "======end========" print a[3] print a["3"] } '
输出结果为:
awk 123 456 world ======end======== world world
相关文章推荐
- shell学习之一: 变量,数组,判断,循环,函数
- shell与awk学习复习例子(循环与字符串截取判断)
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
- shell文本过滤编程(二):awk之基础
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue 第三十六节课
- shell文本过滤编程(七):awk之变量传递
- linux之基础shell脚本编程2 if语句循环判断
- shell高级编程--循环判断
- shell循环,判断介绍,以及实例
- Linux脚本(shell)编程(六) 循环
- 传递shell脚本中的数组给awk
- awk存入shell数组
- shell脚本学习:循序渐进之初级awk语句,until循环,test语句
- shell编程基础【七】---awk
- shell脚本使用两个数组,判断一个变量是否在数组里面的例子
- 学了学shell,钻个牛角尖,根据接口文档生成配置数组...awk sed xargs
- C#学习笔记(二)运算符 乘方 判断语句 循环语句 比较运算符 逻辑运算符 数组
- 编程之美-2.17-数组循环移位
- 不良代码展示-不要用数组循环判断等于的方式,来判断一个对象是否在一个集合内
- 不用循环和递归判断值在数组中的索引