AWK 字符串函数
AWK有以下内置的字符串函数 –
asort(arr [, d [, how] ])
此函数根据GAWK的正常规则对 arr 的内容进行排序,并用从1开始的连续整数替换排序后的值的索引 arr 。
示例
[jerry]$ awk 'BEGIN {
arr[0] = "Three"
arr[1] = "One"
arr[2] = "Two"
print "Array elements before sorting:"
for (i in arr) {
print arr[i]
}
asort(arr)
print "Array elements after sorting:"
for (i in arr) {
print arr[i]
}
}'
执行这段代码时,会得到以下结果 −
输出
Array elements before sorting:
Three
One
Two
Array elements after sorting:
One
Three
Two
asorti(arr [, d [, how] ])
该函数的行为与 asort() 相同,只是使用数组索引进行排序。
示例
[jerry]$ awk 'BEGIN {
arr["Two"] = 1
arr["One"] = 2
arr["Three"] = 3
asorti(arr)
print "Array indices after sorting:"
for (i in arr) {
print arr[i]
}
}'
执行此代码后,您将得到以下结果−
输出
Array indices after sorting:
One
Three
Two
gsub(regex, sub, string)
gsub 代表全局替换。它将正则表达式(regex)的每个出现都替换为给定的字符串(sub)。第三个参数是可选的。如果省略,则使用$0。
示例
[jerry]$ awk 'BEGIN {
str = "Hello, World"
print "String before replacement = " str
gsub("World", "Jerry", str)
print "String after replacement = " str
}'
执行此代码后,你将得到以下结果:
输出
String before replacement = Hello, World
String after replacement = Hello, Jerry
index(str, sub)
它检查 sub 是否是 str 的子字符串。如果成功,则返回sub开始的位置;否则返回0。 str 的第一个字符的位置为1。
示例
[jerry]$ awk 'BEGIN {
str = "One Two Three"
subs = "Two"
ret = index(str, subs)
printf "Substring \"%s\" found at %d location.\n", subs, ret
}'
在执行此代码时,您将得到以下结果−
Substring "Two" found at 5 location.
length(str)
返回字符串的长度。
示例
[jerry]$ awk 'BEGIN {
str = "Hello, World !!!"
print "Length = ", length(str)
}'
执行此代码时,您会获得以下结果−
Length = 16
match(str, regex)
它返回字符串 str 中正则表达式 regex 的最长匹配的索引。如果没有匹配项,则返回0。
示例
[jerry]$ awk 'BEGIN {
str = "One Two Three"
subs = "Two"
ret = match(str, subs)
printf "Substring \"%s\" found at %d location.\n", subs, ret
}'
执行此代码后,您将得到以下结果−
输出
Substring "Two" found at 5 location
split(str, arr, regex)
这个函数通过正则表达式 regex 将字符串 str 拆分为字段,并将字段加载到数组 arr 中。如果省略了 regex ,则使用 FS。
示例
[jerry]$ awk 'BEGIN {
str = "One,Two,Three,Four"
split(str, arr, ",")
print "Array contains following values"
for (i in arr) {
print arr[i]
}
}'
在执行此代码时,您将得到以下结果−
输出
Array contains following values
One
Two
Three
Four
printf(format, expr-list)
这个函数根据格式返回由expr-list构造的字符串。
示例
[jerry]$ awk 'BEGIN {
param = 1024.0
result = sqrt(param)
printf "sqrt(%f) = %f\n", param, result
}'
执行此代码后,您会得到以下结果:
输出
###
sqrt(1024.000000) = 32.000000
strtonum(str)
该函数检查 str 并返回其数值。如果str以0开头,则被视为八进制数。如果str以0x或0X开头,则被视为十六进制数。否则,假设它是一个十进制数。
示例
[jerry]$ awk 'BEGIN {
print "Decimal num = " strtonum("123")
print "Octal num = " strtonum("0123")
print "Hexadecimal num = " strtonum("0x123")
}'
执行这段代码后,你会得到以下结果 –
输出
Decimal num = 123
Octal num = 83
Hexadecimal num = 291
sub(regex, sub, string)
该函数执行一次替换。它用给定的字符串(sub)替换正则表达式模式的第一个匹配项。第三个参数是可选的。如果省略它,则使用$0。
示例
[jerry]$ awk 'BEGIN {
str = "Hello, World"
print "String before replacement = " str
sub("World", "Jerry", str)
print "String after replacement = " str
}'
执行此代码后,您将获得以下结果−
输出
String before replacement = Hello, World
String after replacement = Hello, Jerry
substr(str, start, l)
此函数返回字符串 str 的子字符串,从索引 start 开始,长度为 l 。如果省略长度参数,则返回从索引 start 开始到字符串 str 结尾的后缀部分。
示例
[jerry]$ awk 'BEGIN {
str = "Hello, World !!!"
subs = substr(str, 1, 5)
print "Substring = " subs
}'
执行此代码后,您将获得以下结果:
输出
Substring = Hello
tolower(str)
该函数返回一个字符串的副本 str ,其中所有大写字母被转换为小写字母。
示例
[jerry]$ awk 'BEGIN {
str = "HELLO, WORLD !!!"
print "Lowercase string = " tolower(str)
}'
执行此代码后,您将获得以下结果 −
输出
Lowercase string = hello, world !!!
toupper(str)
这个函数返回字符串的一个副本 str ,其中所有小写字符都转换为大写字符。
示例
[jerry]$ awk 'BEGIN {
str = "hello, world !!!"
print "Uppercase string = " toupper(str)
}'
执行此代码后,您将得到以下结果:
输出
Uppercase string = HELLO, WORLD !!!