awk(1) awk中的函数

xiaoxiao2021-02-28  72

awk 中的函数 1、字符串 1.1 index(原字符串,子字符串) 如果子字符串在原字符串中第一次出现的位置,如果不存在返回0 1.2 length(字符串)   返回字符串的长度 1.3  match(原串,正则表达式) awk 会在原串中批匹配表达式的子字符串,若有多个子字符串,则以原字符串最左方的子字符串为准。 awk 找到该字符串后会依据此字符串进行下列操作 1)设定awk 内建变量 RSTART   RLENGTH RSTART   =匹配到的子字符串在原串中的位置,如果是0 表示没有匹配的子字符串 RLENGTH  =匹配到子字符串的长度,-1 表示没有匹配的子字符串 2)传回RSTART 的值 示例: $ awk 'BEGIN{match("banana",/(an)+/);print RSTART,RLENGTH}' 2 4 1.4 split(原串,数组名,分割符(也可以是正则)) 将原串按照分割符进行分割成一个个field,并且用数组记录分割开的field 示例: $ awk 'BEGIN{ a="1P2p3";split(a,arr,/[pP]/);for(i in arr){print arr[i]} }' 1 2 3 1.5 sub(正则表达式,新字符串,原串) 原串中按照正则表达式进行匹配(最左边匹配),如果匹配到,就替换成新字符串。 如果指定新串是空时,就是去除指定的字符串。 如果原串没有指定,默认为$0 1.5.1 新的字符串可以使用 & 表示匹配到的字符串。 示例: $ awk 'BEGIN{a="banan12a.34an6a";sub(/(an)+[0-9]*/,"[&]",a);print a}' b[anan12]a.34an6a 1.5.2 sub 和 match 搭配可以取出原串中符合条件的子串 示例: awk ' BEGIN{     data = "p12-P34 P56-p61"     while( match( data ,/[0-9]+/) >0){         print substr(data,RSTART, RLENGTH )         sub(/[0-9]+/,"",data)     } } ' $ 结果: 12 34 56 61 说明:match 验证data 包含数字(RSTART>0) substr 进行字符串的截取 sub 把最左边匹配到的数字删除 1.6 gsub(正则表达式,新字符串,原串) 和sub()的区别 1)会替换所有符合条件的子字符串 2)返回被替换的子字符串的个数 1.7 substr(字串,起始位置,长度) 截取从开始位置,指定长度的子字符串,如果没有指定长度,则到字符末尾。 1.8、sprintf(格式,数据列,数据列,数据列,.....) 和awk printf 相同,不同的是此函数会把打印的字符串返回 2、数学函数 int(x)   返回数值的整数部分  int(7.8)=7  int(-7.89)=-7 sqrt(x)  x的平方根 exp(x)   e的x次方 rand()   0到1 的随机数。除非使用者指定rand()函数的起始seed,否则每次执行awk 时,rand() 都将使用同一个内定的seed 来产生随机数。

srand(x)  指定rand()函数的起始seed,若没有指定x,awk 会用执行时的日期和时间为rand()函数的seed。每一次生成随机数都要指定seed,否则每一次生成的随机数都一样。并且如果指定了seed , 此seed不会变,除非再指定

示例:$ awk 'BEGIN{srand();x=rand();print x}'

转载请注明原文地址: https://www.6miu.com/read-73392.html

最新回复(0)