字符串函数
参考:https://www.runoob.com/w3cnote/awk-built-in-functions.html
gsub( Ere, Repl, [ In ] )
gsub 是全局替换( global substitution )的缩写。除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ 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 |
sub(regex,sub,string)
sub 函数执行一次子串替换。它将第一次出现的子串用 regex 替换。第三个参数是可选的,默认为 $0。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ 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 |
index( String1, String2 )
在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)
1 2 3 4 5 6 7 8 9 10 11 | $ 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 [(String)]
返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。
1 2 3 4 5 6 7 8 | $ awk 'BEGIN { str = "Hello, World !!!" print "Length = " , length(str) }' 输出结果为: Substring "Two" found at 5 location. |
blength [(String)]
返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)
substr( String, M, [ N ] )
返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。
如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。
1 2 3 4 5 6 7 8 9 | $ awk 'BEGIN { str = "Hello, World !!!" subs = substr(str, 1, 5) print "Substring = " subs }' 输出结果为: Substring = Hello |
match( String, Ere )
在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。
1 2 3 4 5 6 7 8 9 10 11 | $ 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( String, A, [Ere] )
将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ 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 |
tolower( String )
返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
1 2 3 4 5 6 7 8 | $ awk 'BEGIN { str = "HELLO, WORLD !!!" print "Lowercase string = " tolower(str) }' 输出结果为: Lowercase string = hello, world !!! |
toupper( String )
返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。
1 2 3 4 5 6 7 8 | $ awk 'BEGIN { str = "hello, world !!!" print "Uppercase string = " toupper(str) }' 输出结果为: Uppercase string = HELLO, WORLD !!! |
sprintf(Format, Expr, Expr, . . . )
根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。
1 2 3 4 5 6 7 8 | $ awk 'BEGIN { str = sprintf( "%s" , "Hello, World !!!" ) print str }' 输出结果为: Hello, World !!! |
strtonum(str)
strtonum 将字符串 str 转换为数值。 如果字符串以 0 开始,则将其当作八进制数;如果字符串以 0x 或 0X 开始,则将其当作十六进制数;否则,将其当作浮点数。
1 2 3 4 5 6 7 8 9 10 | $ awk 'BEGIN { print "十进制数 = " strtonum( "123" ) print "八进制数 = " strtonum( "0123" ) print "十六进制数 = " strtonum( "0x123" ) }' 输出结果为: 十进制数 = 123 八进制数 = 83 十六进制数 = 291 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统