• awk字符串操作函数

    发布时间:2019-02-22 15:00:08
    作者:ynkulusi
  • awk中包含大多数常见的字符串操作函数。

    1. sub(ere, repl[, in])

    描述:简单地说,就是将in中匹配ere的部分替换成repl,返回值是替换的次数。如果in参数省略,默认使用$0。替换的动作会直接修改变量的值。

    下面是一个简单的替换的例子:

    echo "hello, world" | awk '{print sub(/ello/, "i"); print}'
    1
    hi, world

     

    在repl参数中&是一个元字符,它表示匹配的内容,例如:

    awk 'BEGIN {var="kodango"; sub(/kodango/, "hello, &", var); print var}'
    hello, kodango
    
    

    2. gsub(ere, repl[, in])

    描述:同sub()函数功能类似,只不过是gsub()是全局替换,即替换所有匹配的内容。

    3. index(s, t)

    描述:返回字符串t在s中出现的位置,注意这里位置是从1开始计算的,如果没有找到则返回0。

    例如:

    awk 'BEGIN {print index("kodango", "o")}'
    2
    awk 'BEGIN {print index("kodango", "w")}'
    0

    4. length[([s])]

    描述:返回字符串的长度,如果参数s没有指定,则默认使用$0作为参数。

    例如:

    awk 'BEGIN {print length('kodango');}'
    0
    echo "first line" | awk '{print length();}'
    10

    5. match(s, ere)

    描述: 返回字符串s匹配ere的起始位置,如果不匹配则返回0。该函数会定义RSTART和RLENGTH两个内置变量。RSTART与返回值相同,RLENGTH记录匹配子串的长度,如果不匹配则为-1。

    例如:

    awk 'BEGIN {
    print match("kodango", /dango/);
    printf "Matched at: %d, Matched substr length: %d\n", RSTART, RLENGTH;
    }'
    3
    Matched at: 3, Matched substr length: 5

    6. split(s, a[, fs])

    描述:将字符串按照分隔符fs,分隔成多个部分,并存到数组a中。注意,存放的位置是从第1个数组元素开始的。如果fs为空,则默认使用FS分隔。函数返回值分隔的个数。

    例如:

    awk 'BEGIN {
    > split("1;2;3;4;5", arr, ";")
    > for (i in arr)
    >     printf "arr[%d]=%d\n", i, arr[i];
    > }'
    arr[4]=4
    arr[5]=5
    arr[1]=1
    arr[2]=2
    arr[3]=3

    这里有一个奇怪的地方是for..in..输出的数组不是按顺序输出的,如果要按顺序输出可以用常规的for循环:

    awk 'BEGIN {
    > split("1;2;3;4;5", arr, ";")
    > for (i=0;^C
    [kodango@devops ~]$ awk 'BEGIN {
    > n=split("1;2;3;4;5", arr, ";")
    > for (i=1; i<=n; i++)
    >     printf "arr[%d]=%d\n", i, arr[i];
    > }'
    arr[1]=1
    arr[2]=2
    arr[3]=3
    arr[4]=4
    arr[5]=5

    7. sprintf(fmt, expr, expr, ...)

    描述:类似printf,只不过不会将格式化后的内容输出到标准输出,而是当作返回值返回。

    例如:
     

    awk 'BEGIN {
    > var=sprintf("%s=%s", "name", "value")
    > print var
    > }'
    name=value

    8. substr(s, m[, n])

    描述:返回从位置m开始的,长度为n的子串,其中位置从1开始计算,如果未指定n或者n值大于剩余的字符个数,则子串一直到字符串末尾为止。

    例如:

    awk 'BEGIN { print substr("kodango", 2, 3); }'
    oda
    awk 'BEGIN { print substr("kodango", 2); }'
    odango

    9. tolower(s)

    描述:将字符串转换成小写字符。

    例如:

    awk 'BEGIN {print tolower("KODANGO");}'
    kodango

    10. toupper(s)

    描述:将字符串转换成大写字符。

    例如

    awk 'BEGIN {print tolower("kodango");}'
    KODANGO
     
  • 分类:bash
    标签: awk
    评论数:0 阅读数:798