awk字符串函数

awk常用的字符串函数总结。原问链接

长度函数length()

awk -F ',' '{print length($67),$67}'   /path/to/my.csv > /tmp/error.csv

比如,输入pg数据库中无法入库的数据:

比如数据超过24个字符就无法入库了。 可以先将所有的异常csv ,ls sd_td* > my_error.csv,重整成一个,或者在awk中直接使用*匹配。

awk -F, '{if(length($2) > 24 || length($3) > 24) {print $0 } }'  my_error.csv
# 输出一整行,可以简化一下 
awk -F, '{if(length($2) > 24 || length($3) > 24) print }'  my_error.csv
# 还可以再简化
awk -F, 'length($2) > 24 || length($3) > 24 ' my_error.csv

分段函数split()

语法如下:

split(input-string, output-array, separator)

split函数将一个字符串分隔到一个数组中。它有三个参数,第一个为输入字符串,也就是要处理的字符串;第二个为一个输出数组;第三个为分隔符。

字符串抽取函数substr()

语法如下:

substr(input-string, location, length)

substr函数提取给定字符串的一部分。它也有三个参数,第一个为输入字符串;第二个为起始位置;最后一个维抽取的字符串的长度,这个参数是可选的,如果没有给定的话,就会从起始位置抽取到最后。

替换函数sub()

语法如下:

sub(original-string, replacement-string, string-variable)

该函数实现将某一字符串替换为特定字符串的功能。第一个参数为原始字符串;第二个参数为替换的字符串;第三个参数则为输入字符串,这个变量即作为输入变量,也作为输出变量。有一点需要注意,成功替换后,你将找不到原先的字符串。一个简单的例子如下:

BEGIN {
    string="Good morning"
    sub("morning", "afternoon", string);
    print string
}

上面是sub.awk的内容,执行了awk -f sub.awk后的输出为:
Good afternoon

匹配函数match()

语法如下:

match(input-string, search-string)

该函数实现在输入字符串中寻找给定字符串或者是正则表达式的功能,当成功匹配后返回一个个正值。第一个参数代表输入的字符串,第二个参数为需要寻找的字符串。

以下例子寻找“morning”在字符串str中。如果在str中有”morning”字符串,则打印成功信息。

BEGIN {
    str="Good morning"
    if(match(str, "morning")){
        print substr(str, RSTART, RLENGTH), "is in", str
    }
}

输出结果为:
morning in Good morning

大小写转换函数tolower(),toupper()

以上函数均在Ubuntu 15.10上进行了验证。