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)

它返回字符串 strregex 的第一个最长匹配的索引。 如果未找到匹配项,则返回 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 !!!

❮ AWK 内置函数