AWK中文手册 下载本文

内容发布更新时间 : 2024/5/12 22:40:00星期一 下面是文章的全部内容请认真阅读。

14.6. 循环 *

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

$ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test。变量的初始值为1,若i小于可等于NF(记录中域的个数),则执行打印语句,且i增加1。直到i的值大于NF. *

$ awk '{for (i = 1; i *

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

{for ( x=3; x<=NF; x++)

if ($x<0){print \{for ( x=3; x<=NF; x++)

if ($x==0){print \ *

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

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

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

14.7. 数组

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

用变量作为数组下标。如:$ awk {name[x++]=$2};END{for(i=0;i *

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

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

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

用字符串作为下标。如:count[\*

用域值作为数组的下标。一种新的for循环方式,for (index_value in array) statement。如:$ awk '{count[$1]++} END{for(>*

delete 函数用于删除数组元素。如:$ awk '{line[x++]=$1} END{for(x in line) delete(line[x])}' test。分配给数组line的是第一个域的值,所有记录处理完成后,special for循环将删除每一个元素。

14.8. awk的内建函数 14.8.1. 字符串函数 *

sub函数匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的时候。格式如下:

sub (regular expression, substitution string):

sub (regular expression, substitution string, target string)

实例:

$ awk '{ sub(/test/, \

$ awk '{ sub(/test/, \

第一个例子在整个记录中匹配,替换只发生在第一次匹配发生的时候。如要在整个文件中进行匹配需要用到gsub

第二个例子在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候。 *

gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:

gsub (regular expression, substitution string)

gsub (regular expression, substitution string, target string)

实例:

$ awk '{ gsub(/test/, \

$ awk '{ gsub(/test/, \

第一个例子在整个文档中匹配test,匹配的都被替换成mytest。

第二个例子在整个文档的第一个域中匹配,所有匹配的都被替换成mytest。 *

index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:

index(string, substring)

实例:

$ awk '{ print index(\

实例返回test在mytest的位置,结果应该是3。 *

length函数返回记录的字符数。格式如下:

length( string ) length

实例:

$ awk '{ print length( \ $ awk '{ print length }' testfile

第一个实例返回test字符串的长度。

第二个实例返回testfile文件中第条记录的字符数。 *

substr函数返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串。格式如下:

substr( string, starting position )

substr( string, starting position, length of string )

实例:

$ awk '{ print substr( \

上例截取了world子字符串。 *

match函数返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串。函数格式如下:

match( string, regular expression )

实例:

$ awk '{start=match(\

$ awk '{start=match(\RLENGTH }'

第一个实例打印以连续小写字符结尾的开始位置,这里是11。

第二个实例还打印RSTART和RLENGTH变量,这里是11(start),11(RSTART),4(RLENGTH)。 *

toupper和tolower函数可用于字符串大小间的转换,该功能只在gawk中有效。格式如下:

toupper( string ) tolower( string )

实例:

$ awk '{ print toupper(\ *

split函数可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割。格式如下:

split( string, array, field separator ) split( string, array )

实例:

$ awk '{ split( \

上例把时间按冒号分割到time数组内,并显示第二个数组元素18。

14.8.2. 时间函数 *

systime函数返回从1970年1月1日开始到当前时间(不计闰年)的整秒数。格式如下:

systime()

实例:

$ awk '{ now = systime(); print now }' *

strftime函数使用C库中的strftime函数格式化时间。格式如下:

systime( [format specification][,timestamp] )

Table 3. 日期和时间格式说明符 格式 描述

%a 星期几的缩写(Sun)

%A 星期几的完整写法(Sunday) %b 月名的缩写(Oct)

%B 月名的完整写法(October) %c 本地日期和时间 %d 十进制日期

%D 日期 08/20/99

%e 日期,如果只有一位会补上一个空格 %H 用十进制表示24小时格式的小时 %I 用十进制表示12小时格式的小时 %j 从1月1日起一年中的第几天