作者/来源:yixinu.com
栏目:运维/编程
日期:2012-04-08 15:05:01
字符串sub和gsub函数,sub 和 gsub 的区别是,前者只对匹配部分一次替换,后者为全部替换
example:
[root@bogon ~]# vim passwd root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@bogon ~]# gawk -F: '{sub(/root/,"fedora"); print $0}' passwd fedora:x:0:0:root:/root:/bin/bash fedora:x:0:0:root:/root:/bin/bash gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@bogon ~]# gawk -F: '{gsub(/root/,"fedora"); print $0}' passwd fedora:x:0:0:fedora:/fedora:/bin/bash fedora:x:0:0:fedora:/fedora:/bin/bash gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@bogon ~]#
字符串长度length函数
格式:gawk '{print length($1)}' filename
example:
[root@bogon ~]# gawk -F: '{print $1,length($1)}' passwd root 4 root 4 gopher 6 ftp 3 [root@bogon ~]#
substr函数,返回字符串从指定位置开始的子字符串
gawk '{print substr($1,7,length)}' filename
example:
[root@bogon ~]# gawk -F: '{print substr($0,4,10)}' passwd t:x:0:0:ro t:x:0:0:ro her:x:13:3 [root@bogon ~]#
match函数:根据正则表达式返回在字符串中出现的位置,未出现,返回0
match函数中的变量:RSTART 子字符串出现的位置、RLENGTH子字符串的长度,这两个变量可以 提供给substr提取字符串
example:
[root@bogon ~]# cat test Tom 234 05/03/2008 685 Mary 451 06/04/2008 932 Bill 127 09/10/2009 3456 [root@bogon ~]# gawk '{match($3,/[12][0-9][0-9][0-9]/);print $3,substr($3,RSTART,RLENGTH)}' test 05/03/2008 2008 06/04/2008 2008 09/10/2009 2009 [root@bogon ~]#
split 函数 :用来将字符串切割成数组
splitb函数切割的数组下标从1开始,0永远为空
example:
[root@bogon ~]# cat awk9.awk #!/bin/awk { split($0,data,":"); } END{ i=1; while(i<=NF){ print data[i]; i++; } } [root@bogon ~]# gawk -F: -f awk9.awk passwd ftp x 14 50 FTP User /var/ftp /sbin/nologin [root@bogon ~]#
模拟二维数组输出passwd
awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,4] = 1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP (