1.字符串处理函数
函数名 | 解释 | 函数返回值 |
---|---|---|
length(str) | 计算字符串的长度 | 整数长度值 |
index(str1,str2) | 在str1中查找str2中的位置 | 返回值为位置索引 |
tolower() | 转换为小写 | 转换后的小写字符串 |
toupper() | 转换为大写 | 转换为大写后的的字符串 |
substr(str,m,n) | 从str中的m位置截取n位 | 截取之后的字符串 |
split(str,arr,fs) | 按照fs进行切割字符串,然后保存在arr中 | 截取之后的字符串 |
match(str,RE) | 在str中按照RE进行查找,返回位置 | 返回索引位置 |
sub(RE,RepStr,str) | 在字符串中查找符合RE的子串,将其替换成RepStr,只替换第一个 | 替换的个数 |
gsub(RE,RepStr,str) | 在str中搜索符合RE的子串,然后将其替换成RepStr,替换所有 | 替换的个数 |
2.实例
示例一:已:分隔符,返回/etc/passwd中每行每个字段的长度
# 第一步创建又给example.awk文件,然后文件内容如下
BEGIN{
FS=":"
}
{
i=0
while(i<=NF)
{
# 这一步主要是将:去掉
if (i==NF)
printf "%d",length($i)
else
printf "%d:", length($i)
i++
}
print ""
}
示例二:搜索字符串中“I have a dream”中出现“ea”字符串的位置
# index 和match是等效的
awk 'BEGIN{str="I have a dream";location=index(str,"ea");print location}'
awk 'BEGIN{str="I have a dream";location=match(str,"ea");print location}'
示例三:将字符串“i have a dream ” 按照空格分隔符,然后将数据保存到arr中
# 第一个注意的是:保存的arr已数组1开始进行的
# 第二个是默认是空格进行分割的
awk 'BEGIN{str="i have a dream";split(str,arr,"");print arr[1]}'
awk 'BEGIN{str="i have a dream";split(str,arr);print arr[1]}'
示例四:搜索字符串中“i have a 89 dream”第一个数字出现的位置
awk 'BEGIN{str="i have a 89 dream";location=match(str,/[0-9]/);print location}'
示例五:替换字符串中“i have a 89 dream 9087 haha”第一个匹配到的数字串为$符号
# 第一个替换
awk 'BEGIN{str="i have a 89 dream 9087 haha";num=sub(/[0-9]+/,"$",str);printf "%d %s",num,str}'
# 全部替换
awk 'BEGIN{str="i have a 89 dream 9087 haha";num=gsub(/[0-9]+/,"$",str);printf "%d %s",num,str}'
3.注意
- match 可以提代index
- 使用正则匹配必须带上 / / ====>> 重点
- 匹配所有的数字为[0-9]+,匹配第一个数字为[0-9]
- split函数返沪的arr,下标是从1位置开始的