awk函数总结(awk算术函数与字符串函数)

发布时间:2019-12-22编辑:脚本学堂
awk函数用法总结,主要介绍awk算术函数(cos、exp、int、rand)与awk字符串函数(gsub、sub)的用法,需要的朋友参考下。

一、linuxjishu/13830.html target=_blank class=infotextkey>awk算术函数
1.cos(x) 返回x的余弦(x为弧度)
2.exp(x) 返回e的x次幂
3.int(x) 返回x的整数部份的值
4.log(x) 返回x的自然对数(以e为底)
5.sin(x) 返回x的正弦(x为弧度)
6.sqrt(x)返回x的平方根
7.atan2(y,x)返回y/x的反正切,其值勤在-pai和pai之间
8.rand() 近回伪随机数r,其中0<=r<1
9.srand(x)建立rand()的新的种子数,如果没有指定种子数,就用当天的时间,返回旧的种子数。

一般只用得到int(x)和rand()/srnad(x)。

例子:
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# awk 'BEGIN{print 100/6}'
16.6667
[root@PMACN-WILD tmp]# awk 'BEGIN{print int(100/6)}'
16
[root@PMACN-WILD tmp]# awk 'BEGIN{print rand();srand();print rand();print rand()}'
0.237788
0.35151
0.727543
[root@PMACN-WILD tmp]# awk 'BEGIN{print rand();srand();print rand();print rand()}'
0.237788
0.208052
0.125644
 

以上随机函数在没有srand()前,每次出来的都一样,因此,如果需要每次得到的值不一定,就在输出最前面加上srand()。
 
二、awk字符串函数
1.gsub(r,s,t) 在字符串t中用字符串s替换和正则表达式r匹配的所有字符串,返回替换的个数量.
如果没有给出t,默认为$0.

2.sub(r,s,t)在字符串t中用s替换正则表达式r的首次匹配,如果成功则返回1,否则返回0.
如果没有给出t,默认为$0.
上述两个都为替换函数,gsub是所有替换,而sub是道次匹配替换,这和sed的g flag有点类似.

实例:
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# ifconfig
eth0Link encap:EthernetHWaddr 00:0C:29:5E:FC:51
 inet addr:172.20.14.22Bcast:172.20.14.31Mask:255.255.255.224
 inet6 addr: fe80::20c:29ff:fe5e:fc51/64 Scope:Link
 UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
 RX packets:9393016 errors:0 dropped:0 overruns:0 frame:0
 TX packets:7890009 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:3681620079 (3.4 GiB)TX bytes:3663443526 (3.4 GiB)
 Interrupt:59 Base address:0x2000
loLink encap:Local Loopback
 inet addr:127.0.0.1Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNINGMTU:16436Metric:1
 RX packets:2387 errors:0 dropped:0 overruns:0 frame:0
 TX packets:2387 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 RX bytes:120296 (117.4 KiB)TX bytes:120296 (117.4 KiB)
[root@PMACN-WILD tmp]# ifconfig | grep 'inet addr' | awk '{print sub(/inetaddr:/,"");print $1}'
1
172.20.14.22
1
127.0.0.1
[root@PMACN-WILD tmp]# ifconfig | grep 'inet addr' | awk '{print gsub(/inet addr:/,"");print $1}'
1
172.20.14.22
1
127.0.0.1
 

其中1是指替换的个数,而两个IP地址是由于把前面inet addr:这个替换为空了,所以$1为ip地址了.
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# ifconfig | grep 'inet addr' | awk '{print gsub(/255/,300);print $0}'
3
 inet addr:172.20.14.22Bcast:172.20.14.31Mask:300.300.300.224
1
 inet addr:127.0.0.1Mask:300.0.0.0
[root@PMACN-WILD tmp]# ifconfig | grep 'inet addr' | awk '{print sub(/255/,300);print $0}'
1
 inet addr:172.20.14.22Bcast:172.20.14.31Mask:300.255.255.224
1
 inet addr:127.0.0.1Mask:300.0.0.0
 

上面两个是替换255为300,gsub和sub应用的区别显而易见.
3.index(s,t)返回子串t在字符串s中的位置,如果没有指定s,则返回0.
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# echo "1234567890" | awk '{print index($0,4)}'
4
[root@PMACN-WILD tmp]# echo "1234567890" | awk '{print index($0,8)}'
8
[root@PMACN-WILD tmp]# echo "1234567890" | awk '{print index($0,23)}'
2
 

表示后面的字串在$0中哪个位置出现.
 
4.length(s)返回字符串s的长度,当没有给出s时,返回$0的长度.
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# echo "1234567890" | awk '{print length()}'
10
[root@PMACN-WILD tmp]# echo "1234567890123" | awk '{print length()}'
13
 

5.split(s,a,sep)使用字段分隔符s分解到数组a的无素中,返回元素的个数,如果没有给出sep,则使用FS,数组分隔和字段分隔采用同样的方式.
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# ifconfig | grep 'inet addr' | awk '{print split($2,a,":");print a[2]}'
2
172.20.14.22
2
127.0.0.1
 

上面的2是指split($2,a,":")把字段2用:做为分隔符,把字段存储在a数组中.a[1],a[2]
 
6.match(s,r) 如果正则表达式r在s中出现,则返回出现的起始位置,如果在s中没有发现r,则返回0.
 
7.sprintf("fmt",expr) 对expr使用printf格式说明
 
8.substr(s,p,n) 返回字串s中从位置p开始最大长度为n的子串,如果没有给出n,返回从p开始剩余的字符串.
 

复制代码 代码示例:
[root@PMACN-WILD tmp]# echo "886-021-64856866" | awk '{print substr($0,1,3);prin
t substr($0,5,3);print substr($0,9)}'
886
021
64856866

9.tolower(s) 将字符串s中的所有大写字符转换成小写,并返回新串.
 
10.toupper(s) 将字符串中s中的小写字符转换成大写,并返回新串.