AWK - 字符串函数
AWK 具有以下内置字符串函数 −
asort(arr [, d [, how] ])
此函数使用 GAWK 的常规值比较规则对 arr 的内容进行排序,并将排序后的值 arr 的索引替换为从 1 开始的连续整数。
示例
[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 代表全局替换。 它用给定的字符串(子)替换每一次出现的正则表达式。 第三个参数是可选的。 如果省略,则使用 $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)
此函数执行一次替换。 它用给定的字符串(子)替换第一次出现的正则表达式模式。 第三个参数是可选的。 如果省略,则使用 $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 !!!

