码迷,mamicode.com
首页 > 其他好文 > 详细

awk循环

时间:2015-05-05 08:58:10      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:awk循环   awk   awk命令   

循环的功能是:当测试表达式的条件为真时,重复执行表达式后面的语句。循环常常被用来对记录中的每个字段重复执行某种操作,或者在END块中用来循环处理某个数组中的所有元素。awk有3种类型的循环:while 循环、for循环和特殊for循环。


1. while循环
使用while循环的第一步是给一个变量设初值,然后在while表达式中测试该变量。如果求得表达式的值为真(非0),则进入循环体执行其中的语句。如果循环体内有多条语句,就必须用花括号把这些语句括起来。循环块结束之前,一定要更新用来控制循环表达式的变量,否则循环将无休止地进行下去。下面这个例子中,每处理一条新记录,循环控制变量就会被重置一次。
do/while循环与while 循环很相似,唯一的区别在于do/while要先执行循环体至少一次,然后才测试表达式。
范例

$ awk ‘{i=1; while(i<=NF){print NF,$i; i++ }}‘filename

说明
变量i被初始化为1 ;当i小于或等于记录的字段数(NF)时,先执行print语句,然后将i加1。接下来又重新测试表达式,直至i大于NF的值。变量i要在awk开始处理下一条记录时被重置。


2. for循环
for循环和while循环基本相同,只不过for循环的圆括号中需要3个表达式,前两个分别是初始化表达式和测试表达式,第3个则用于更新测试表达式所用的变量。在awk的for循环中,圆括号里的第一条语句只能初始化一个变量(C语言中与之对应的语句则可以用逗号分隔的形式初始化多个变量)。

范例

$ awk ‘{for(i=1;i<=NF;i++) print NF,$i}‘ filename

说明:变量i被初始化为1,然后测试它是否小于或等于记录的字段数目(NF)。若是,print函数便打印出NF 和$i的值($i代表第i个字段),然后将i加1 (for循环经常会在END操作中与数组一同使用,循环处理数组的所有元素)。


3. 特殊for循环

当下标为字符串或非连续的数字时,不能用for循环来遍历数组。这时候就要使用特殊for循环。特殊for循环把下标作为键来查找与之关联的值。

格式

$ awk ‘{
  for(item in arrayname){
    print arrayname[item]
  }
}‘

范例

cat db
1 Tom Jones
2 Mary Adams
3 Sally Chang
4 Billy B1ack
5 Tom Savaqe
6 Tom Chung
7 Reqqie Steel
8 Tommy Tucker
$ awk ‘/^Tom/{name[NR]=$1}END{for(i=1;i<=NR;i++)print name[i]}‘ db
Tom



Tom
Tom

Tommy

说明:如果在输入行的行首匹配到正则表达式Tom,就为数组name赋一个值。NR值(当前记录号),将作为name数组的索引。在每一行上匹配到Tom时,name数组就赋一个第一个字段($1)的值,当到达END块时,name数组仅包含name[l],name[5],name[6],name[8]这4个元素。因此,当使用for循环打印name数组的值时,索引2、3 、4、7为空。


参考文章:

http://www.linuxawk.com/jiaocheng/233.html

http://www.linuxawk.com/jiaocheng/260.html



while循环

awk循环

标签:awk循环   awk   awk命令   

原文地址:http://blog.csdn.net/xiyangyang052/article/details/45487155

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!