awk 命令使用入门基础详解(5)

fflush函数用以刷新输出缓冲区,如果没有参数,就刷新标准输出的缓冲区,如果以空字符串为参数,如fflush(""),则刷新所有文件和管道的输出缓冲区。

  14.5. 条件语句

awk中的条件语句是从C语言中借鉴过来的,可控制程序的流程。

14.5.1. if 语句

格式: {if (expression){ statement; statement; ... } }

$ awk '{if ($1 <$2) print $2 " too high"}' test #如果第一个域小于第二个域则打印。 $ awk '{if ($1 < $2) {count++; print count" ok"}} END{print count" is ok!"}' test #如果第一个域小于第二个域,则count加一,并打印ok并统计总数

14.5.2. if/else语句,用于双重判断

格式: {if (expression){ statement; statement; ... } else{ statement; statement; ... } }

$ awk '{if ($1 > 100) print $1 " is too big" ; else print "ok"}' test #如果$1大于100则打印$1 bad,否则打印ok。 $ awk '{if ($1 > 100){ count++; print $1} else {count--; print $2}}' test #如果$1大于100,则count加一,并打印$1,否则count减一,并打印$2

14.5.3. if/else else if语句,用于多重判断。

格式: {if (expression){ statement; statement; ... } else if (expression){ statement; statement; ... } else if (expression){ statement; statement; ... } else { statement; statement; ... } }

14.6. 循环

awk有三种循环: while循环;for循环;special for循环。

#变量i初始值为1,若i小于或等于NF(记录域总数),文件第一列自相加,并执行打印语句。 $ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test $ awk '{for (i = 1; i<NF; i++) print NF,$i}' test #作用同上。

bread continue 语句。break用于在满足条件的情况下跳出循环;continue用于在满足条件的情况下忽略后面的语句,直接返回循环的顶端。如:

awk '{for ( x=3; x<=NF; x++) if ($x<0){print NR" line Bottomed out!"; break} else if ($x>=0){print NR" line Get next item"; continue}}' test

next 语句从输入文件中读取一行,然后从头开始执行awk脚本。如:

awk '{if ($1 ~/test/){next} else {print}}' test

exit 语句用于结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错。

14.7. 数组

awk中的数组的下标可以是数字和字母,称为关联数组。

14.7.1. 下标与关联数组

用变量作为数组下标。例如:

$ awk {name[x++]=$2};END{for(i=0;i<NR;i++) print i,name[i]}' test #数组name中的下标是一个自定义变量x(初始化值为0),读取一行内容后增加1,并将每行第二个域的值赋给name数组的各个元素。\ #在END模块中,for循环被用于循环整个数组,从下标为0的元素开始,打印那些存储在数组中的值。因为下标是关健字,所以它不一定从0开始,可以从任何值开始。

special for 循环用于读取关联数组中的元素。格式如下:

{for (item in arrayname){ print arrayname[item] } }

$ awk '/^tom/{name[NR]=$1}; END{for(i in name){print name[i]}}' test #打印有值的数组元素。打印的顺序是随机的。

用字符串作为下标。如:count["test"]

用域值作为数组的下标。一种新的for循环方式,for (index_value in array) statement。例如:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11866.html