随笔- 310  文章- 1  评论- 0  阅读- 86066 

字符串函数

参考: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

  

 

 

 

 

 posted on   boye169  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示