awk
提供了许多强大的字符串函数,见下表:
内置字符串函数
gsub(r,s)
在整个
$0
中用
s
替代
r
gsub(r,s,t)
t
index(s,t)
返回
中字符串
的第一位置
length(s)
长度
match(s,r)
测试
是否包含匹配
r
的字符串
split(s,a,fs)
在
fs
上将
分成序列
a
sprint(fmt,exp)
返回经
fmt
格式化后的
exp
sub(r,s)
用
中最左边最长的子串代替
s
substr(s,p)
返回字符串
中从
p
开始的后缀部分
substr(s,p,n)
开始长度为
n
的后缀部分
详细说明一下各个函数的使
用方法。
gsub
函数有点类似于
sed
查找和替换。它允许替换一个字符串或字符为另一个字符串或字
符,并以正则表达式的形式执行。第一个函数作用于记录
,第二
个
函数允许指定
目标,然而,如果未指定目标,缺省为
。
index(s,t)
函数返回目标字符串
中查询字符串
的首位置。
length
函数返回字符串
字符
长度。
match
函数测试字符串
是否包含一个正则表达式
定义的匹配。
split
使用域分隔
符
将
字符串
划分为指定序列
a
sprint
函数类似于
printf
函数
(
以后涉及
)
,
返回基本输出格式
的
结果字符串
exp
sub(r,s)
函数将用
中最左边最长的子串,该子串被
(r)
匹配。
sub(s,p)
在位置
后的后缀。
substr(s,p,n)
同上,并指定子串长度为
现在看一看
中这些字符串函数的功能。
1.gsub
要在整个记录中替换一个字符串为另一个,使用正则表达式格式,
/
目标模式
,替换模式
。例如改变学生序号
4842
到
4899
:
$ awk 'gsub('4842/, 4899) {print $0}' grade.txt
J.Troll 07/99 4899 Brown-3 12 26 26
echo "i am hifdafafdst"|awk '{gsub(/am/,"abcc",$0);print $0}'
i abcc hifdafafdst
2.index
查询字符串
中
出现的第一位置。必须用双引号将字符串括起来。例如返回目标字符串
Bunny
ny
出现的第一位置,即字符个数。
$ awk 'BEGIN {print index("Bunny", "ny")} grade.txt
3.length