awk中循环遍历_如何在awk中使用循环

awk中循环遍历

Awk脚本包含三个主要部分:可选的BEGIN和END函数以及在每个记录上执行的编写的函数。 在某种程度上,awk脚本的主体是循环,因为函数中的命令针对每个记录运行。 但是,有时您想在一条记录上多次运行命令,为实现这一点,必须编写一个循环。

有几种循环,每种循环都有其独特的用途。

While循环

while循环测试条件并执行命令, 测试返回true 。 一旦测试返回false ,则循环中断。


   
   
#!/bin/awk -f

BEGIN {
        # Loop through 1 to 10

    i = 1 ;
    while ( i < = 10 ) {
        print i, " to the second power is " , i * i;
        i = i+ 1 ;
    }
exit ;
}

在这个简单的示例中,awk打印变量i中包含的任何整数的平方。 while(i <= 10)短语告诉awk仅在i的值小于或等于10时执行循环。在最终迭代( i为10)之后,循环结束。

做while循环

do while循环在关键字do之后执行命令。 随后执行测试以确定是否满足停止条件。 仅测试返回true(即满足结束条件)时才重复命令。 如果测试失败,则循环将中断,因为已满足结束条件。


   
   
#!/usr/bin/awk -f
BEGIN {

        i = 2 ;
        do {
                print i, " to the second power is " , i * i;
                i = i + 1
        }
        while ( i < 10 )

exit ;
}

对于循环

awk中有两种for循环。

一种for循环初始化变量,执行测试,然后一起递增变量,在测试为true时执行命令。


   
   
#!/bin/awk -f

BEGIN {
    for ( i = 1 ; i < = 10 ; i++ ) {
        print i, " to the second power is " , i * i;
    }
exit ;
}

另一种for循环将变量设置为数组的连续索引,对每个索引执行命令集合。 换句话说,它使用数组从记录中“收集”数据。

本示例实现了Unix命令uniq的简化版本。 通过将字符串列表添加到称为a的数组中作为键,并在每次出现相同键时递增该值,就可以计算出一个字符串出现的次数(如uniq--count选项)。 如果您打印数组的键,则每个出现一次或多次的字符串都将得到。

例如,使用演示文件colours.txt (来自先前的文章):


   
   
name       color  amount
apple      red    4
banana     yellow 6
raspberry  red    99
strawberry red    3
grape      purple 10
apple      green  8
plum       purple 2
kiwi       brown  4
potato     brown  9
pineapple  yellow 5

这是awk形式的uniq -c的简单版本:


   
   
#! /usr/bin/awk -f

NR ! = 1 {
    a [ $2 ] ++
}
END {
    for ( key in a ) {
                print a [ key ] " " key
    }
}

示例数据文件的第三列包含第一列中列出的项目数。 您可以使用数组和for循环按颜色对第三列中的项目进行计数:


   
   
#! /usr/bin/awk -f

BEGIN {
    FS = " " ;
    OFS = " \t " ;
    print ( "color \t sum" ) ;
}
NR ! = 1 {
    a [ $2 ] += $3 ;
}
END {
    for ( b in a ) {
        print b, a [ b ]
    }
}

如您所见,在处理文件之前,您还需要在BEFORE函数中打印标题列(该列始终仅发生一次)。

循环

循环是任何编程语言的重要组成部分,awk也不例外。 使用循环可以帮助您控制awk脚本的运行方式,可以收集哪些信息以及如何处理数据。 我们的下一篇文章将介绍switch语句, continuenext


您愿意听这篇文章吗? 它改编自黑客社区广播公司Hacker Public Radio的一集,内容是针对黑客的。

翻译自: https://opensource.com/article/19/11/loops-awk

awk中循环遍历

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值