当前位置: 首页 > 科技观察

如何在awk中使用循环

时间:2023-03-17 13:26:41 科技观察

来了解多次执行同一命令的不同类型的循环。awk脚本包含三个主要部分:BEGIN和END函数(均为可选),以及用户编写的每次执行的函数。从某种意义上说,awk的主体是一个循环,因为函数中的命令对每条记录执行一次。但是,有时候你想对一条记录执行多个命令,这时就需要使用循环了。有多种类型的循环,每种循环适用于不同的场景。while循环while循环测试表达式并在表达式为真时执行命令。当表达式变为假时,循环中断。#!/bin/awk-fBEGIN{#循环1到10i=1;while(i<=10){printi,"的二次方是",i*i;我=我+1;}exit;}在这个简单的例子中,awk打印变量i中的整数值的平方。while(i<=10)语句告诉awk只有当i的值小于或等于10时才执行循环。当循环最后一次执行时(i的值为10),循环终止。do-while循环do-while循环执行关键字do之后的命令。在每个循环结束时检查测试表达式以确定是否终止循环。仅当测试表达式返回真(即不满足终止循环的条件)时才重复该命令。如果测试表达式返回false,则循环终止,因为终止循环的条件已满足。#!/usr/bin/awk-fBEGIN{i=2;do{printi,"的二次方是",i*i;i=i+1}while(i<10)exit;}for循环awk有两种for循环。for循环初始化一个变量,测试一个测试表达式,递增变量,并在表达式计算为真时继续执行。#!/bin/awk-fBEGIN{for(i=1;i<=10;i++){打印i,"的二次方是",i*i;}exit;}另一个for循环设置了一个索引连续的For数组变量,对每个索引执行一个命令集。也就是说,它使用一个数组来“收集”每条命令执行的结果。此示例实现了Unix命令uniq的简化版本。通过将一系列字符串作为键添加到数组a并在相同键再次出现时递增键值,可以获得特定字符串的出现次数(如uniq的--count选项)。如果您打印数组的所有键,您将获得该字符串的所有匹配项。以演示文件colours.txt(上一篇文章中的文件)为例:namecoloramountapplered4bananayellow6raspberryred99strawberryred3grapepurple10applegreen8plumpurple2kiwibrown4potatobrown9pineappleyellow5这是简单uniq的awk版本-c:#!/usr/bin/awk-fNR!=1{a[$2]++}END{for(keyina){printa[key]""key}}示例数据文件的第三列是列中列出的条目的计数。您可以使用一个数组和一个for循环来按颜色对第三列中的条目进行计数。#!/usr/bin/awk-fBEGIN{FS="";OFS="\t";print("color\tsum");}NR!=1{a[$2]+=$3;}END{for(bina){printb,a[b]}}如你所见,你还需要在处理文件之前打印BEFORE函数中的列标题列表(仅执行一次)。循环循环是任何编程语言的重要组成部分,awk也不例外。使用循环,您可以控制awk脚本的运行方式、它可以统计哪些信息以及它如何处理您的数据。我们将在下一篇文章中讨论switch、continue和next语句。