awk内置字符串函数:实例
时间:2007-08-22 来源:codfei
awk内置字符串函数
gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分 依次举例:
[root@codfei5 Bash]# cat test.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
[root@codfei5 Bash]# awk 'gsub(4842,4899){print $0}' test.txt
J.Troll 07/99 4899 Brown-3 12 26 26
[root@codfei5 Bash]# awk 'BEGIN{print index("Bunny","ny")}'
4
[root@codfei5 Bash]# awk '$1=="J.Troll"{print length($1)}' test.txt
7
[root@codfei5 Bash]# awk 'BEGIN {print length("codfei is handsome")}'
18
[root@codfei5 Bash]# awk 'BEGIN {print match("ANCD",/C/)}'
3
[root@codfei5 Bash]# awk 'BEGIN {print split("123-456-789--",array,"-")}'
5
[root@codfei5 Bash]# cat test.txt|awk 'sub(26,29)'
J.Lulu 06/99 48317 green 9 24 29
J.Troll 07/99 4842 Brown-3 12 29 26
#匹配每行第一个26
[root@codfei5 Bash]# awk '$1=="L.Tansley" {print substr($1,1,5)}' test.txt
L.Tan
#上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。
[root@codfei5 Bash]# awk '$1=="L.Tansley" {print substr($1,3,99)}' test.txt
Tansley
#如果给定长度值远大于字符串长度,awk将从起始位置返回所有字符,要抽取 L.Tansley
#的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。
[root@codfei5 Bash]# awk '{print substr($1,3)}' test.txt
Tansley
Lulu
Bunny
Troll
Tansley
[root@codfei5 Bash]# str="say hello to you "
[root@codfei5 Bash]# echo $str| awk '{print substr($str,1,3)}'
say
[root@codfei5 Bash]# echo $str| awk '{print substr($str,5,5)}'
hello
[root@codfei5 Bash]# echo $str| awk '{print substr($str,11,2)}'
to
[root@codfei5 Bash]# echo $str| awk '{print substr($str,14,3)}'
you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,14)}'
you [root@codfei5 Bash]# echo $str| awk '{print substr($str,11)}'
to you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,5)}'
hello to you
gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分 依次举例:
[root@codfei5 Bash]# cat test.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
[root@codfei5 Bash]# awk 'gsub(4842,4899){print $0}' test.txt
J.Troll 07/99 4899 Brown-3 12 26 26
[root@codfei5 Bash]# awk 'BEGIN{print index("Bunny","ny")}'
4
[root@codfei5 Bash]# awk '$1=="J.Troll"{print length($1)}' test.txt
7
[root@codfei5 Bash]# awk 'BEGIN {print length("codfei is handsome")}'
18
[root@codfei5 Bash]# awk 'BEGIN {print match("ANCD",/C/)}'
3
[root@codfei5 Bash]# awk 'BEGIN {print split("123-456-789--",array,"-")}'
5
[root@codfei5 Bash]# cat test.txt|awk 'sub(26,29)'
J.Lulu 06/99 48317 green 9 24 29
J.Troll 07/99 4842 Brown-3 12 29 26
#匹配每行第一个26
[root@codfei5 Bash]# awk '$1=="L.Tansley" {print substr($1,1,5)}' test.txt
L.Tan
#上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。
[root@codfei5 Bash]# awk '$1=="L.Tansley" {print substr($1,3,99)}' test.txt
Tansley
#如果给定长度值远大于字符串长度,awk将从起始位置返回所有字符,要抽取 L.Tansley
#的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。
[root@codfei5 Bash]# awk '{print substr($1,3)}' test.txt
Tansley
Lulu
Bunny
Troll
Tansley
[root@codfei5 Bash]# str="say hello to you "
[root@codfei5 Bash]# echo $str| awk '{print substr($str,1,3)}'
say
[root@codfei5 Bash]# echo $str| awk '{print substr($str,5,5)}'
hello
[root@codfei5 Bash]# echo $str| awk '{print substr($str,11,2)}'
to
[root@codfei5 Bash]# echo $str| awk '{print substr($str,14,3)}'
you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,14)}'
you [root@codfei5 Bash]# echo $str| awk '{print substr($str,11)}'
to you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,5)}'
hello to you
相关阅读 更多 +