若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0。
例如:
$ awk 'BEGIN{ print index("8-12-94","-") }'
结果打印 2
例如:
$ awk 'BEGIN { print length("John") }'
结果打印 4
awk会在原字串中查找合乎正则表达式的子字串,若合乎条件的子字串有多个,则以原字串中最左方的子字串为准。awk找到该字串后会依此字串为依据进行下列动作:
1. 设定awk內建变量 RSTART、RLENGTH:
RSTART = 合条件的子字串在原字串中的位置。
= 0 ;若未找到合条件的子字串。
RLENGTH = 合条件的子字串长度。
= -1 ;若未找到合条件的子字串。
2. 返回 RSTART 的值.
例如:
awk ' BEGIN {
match( "banana", /(an)+/ ) print RSTART, RLENGTH } '
结果打印 2 4
awk将依所指定的分隔字符(field separator)来分隔原字串成一个个的字段(field),并以指定的数组记录各个被分隔的字段。
例如:
ArgLst = "5P12p89"
split( ArgLst, Arr, /[Pp]/)
执行后: Arr[1]=5, Arr[2]=12, Arr[3]=89
该函数的用法与 awk 或 C 的输出函数printf()相同。所不同的是sprintf()会将要求印出的结果当成一个字串返回。一般最常使用sprintf()来改变数据格式。如:x 为一数值数据,若欲将其变成一个含二位小数的数据,可执行如下指令:
x = 28 x = sprintf("%.2f",x)
执行后: x = "28.00"
sub( )将原字串中第一个(最左边)合乎所指定的正则表达式的子字串改以新字串取代。
1. 第二个参数"新字串"中可用"&"来代表"合乎条件的子字串"。承上例,执行下列指令:
A = "a6b12anan212.45an6a" sub( /(an)+[0-9]*/, "[&]", A) print A
结果打印 ab12[anan212].45an6a
2. sub()不仅可执行替换(replacement)的功用,当第二个参数为空字串("")时,sub()所执行的是"去除指定字串"的功用。
3. 通过 sub() 与 match() 的搭配使用,可逐次取出原字串中合乎指定条件的所有子字串。
例如执行下列程序:
awk ' BEGIN { data = "p12-P34 P56-p61"
while( match( data ,/[0-9]+/) > 0) { print substr(data, RSTART, RLENGTH ) sub(/[0-9]+/,"",data) } }'
结果打印:
4. sub( )中第三个参数(原字串)若未指定,则其缺省值为$0。
可用 sub( /[9-0]+/,"digital" ) 表示 sub(/[0-9]+/,"digital",$0 )
这个函数与 sub()一样,同样是进行字串取代的函数。唯一不同点是
1. gsub()会取代所有合条件的子字串。
2. gsub()会返回被取代的子字串个数。
请参考 sub()。
返回从起始位置起,指定长度的子字串。若未指定长度,则返回起始位置到字串末尾的子字串。
例如:
$ awk 'BEGIN { print substr("User:Wei-Lin Liu", 6)}'
结果打印 Wei-Lin Liu
例如:
int(7.8) 将返回 7
int(-7.8) 将返回 -7
例如:
sqrt(9) 将返回 3
若 x 为负数,则执行 sqrt(x) 时将造成 Run Time Error (笔者注:本机上提示的是"-nan",如下图)
例如:
exp(1) 将返回 2.71828
例如:
log(exp(1)) 将返回 1 (笔者注:本机上log(e)打印出来是-inf,所以用exp(1)代替e)
若 x< 0,则执行 sqrt(x)时将造成 Run Time Error(笔者注:本机上提示的是"nan",同上)
除非使用者自行指定rand()函数起始的种子,否则每次执行awk程式时,rand()函数都将使用同一个缺省的种子来产生随机数。
若省略了x,则awk会以执行时的日期与时间为rand()函数起始的种子。