作者/来源: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 (
