挺好的
gawk中的条件语句是从C语言中借鉴过来的,可控制程序的流程。
14.5.1. if语句
格式:
{if (expression_r){
statement; statement; …
}
}
gawk.exe “{if ($1 <$2) print $2 “””too high”””}”
test.txt。如果第一个域小于第二个域则打印。
gawk.exe “{if ($1 < $2) {count++; print “””ok”””}}”
test.txt.如果第一个域小于第二个域,则count加一,并打印ok。
14.5.2. if/else语句,用于双重判断。
格式:
{if (expression_r){
statement; statement; …
}
else{
statement; statement; …
}
}
gawk.exe “{if ($1 > 100) print $1 “””bad””” ; else
print “””ok”””}” test.txt。如果$1大于100则打印$1 bad,否则打印ok。
gawk.exe “{if ($1 > 100){ count++; print $1} else
{count–; print $2}”
test.txt。如果$1大于100,则count加一,并打印$1,否则count减一,并打印$1。
14.5.3. if/else else if语句,用于多重判断。
格式:
{if (expression_r){
statement; statement; …
}
else if (expression_r){
statement; statement; …
}
else if (expression_r){
statement; statement; …
}
else {
statement; statement; …
}
}
14.6. 循环
*
gawk有三种循环:while循环;for循环;special for循环。
*
gawk.exe “{ i = 1; while ( i <= NF ) { print NF,$i;
i++}}”
test.txt。变量的初始值为1,若i小于可等于NF(记录中域的个数),则执行打印语句,且i增加1。直到i的值大于NF.
*
gawk.exe “{for (i = 1; i *
breadkcontinue语句。break用于在满足条件的情况下跳出循环;continue用于在满足条件的情况下忽略后面的语句,直接返回循环的顶端。如:
{for ( x=3; x<=NF; x++)
if ($x<0){print “Bottomed out!”; break}}
{for ( x=3; x<=NF; x++)
if ($x==0){print “Get next item”; continue}}
*
next语句从输入文件中读取一行,然后从头开始执行awk脚本。如:
{if ($1 ~/test.txt/){next}
else {print}
}
*
exit语句用于结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错。
14.7. 数组
awk中的数组的下标可以是数字和字母,称为关联数组。
14.7.1. 下标与关联数组
*
用变量作为数组下标。如:gawk.exe {name[x++]=$2};END{for(i=0;i *
special for循环用于读取关联数组中的元素。格式如下:
{for (item in arrayname){
print arrayname[item]
}
}
gawk.exe “/^tom/{name[NR]=$1}; END{for(i in name){print name[i]}}”
test.txt。打印有值的数组元素。打印的顺序是随机的。
*
用字符串作为下标。如:count[“test.txt”]
*
用域值作为数组的下标。一种新的for循环方式,for (index_value in array)
statement。如:gawk.exe “{count[$1]++} END{for(name in count) print
name,count[name]}”
test.txt。该语句将打印$1中字符串出现的次数。它首先以第一个域作数组count的下标,第一个域变化,索引就变化。
*
delete 函数用于删除数组元素。如:gawk.exe “{line[x++]=$1} END{for(x in line)
delete(line[x])}” test.txt。分配给数组line的是第一个域的值,所有记录处理完成后,special
for循环将删除每一个元素。