awk中split()函数用于按分隔符将字符串拆分为数组,语法为split(string,array,separator),返回元素个数,数组下标从1开始,原字符串不变。

在 awk 中,split() 是最常用的字符串分割函数,能把一行中的单列数据按指定分隔符拆成数组,方便后续逐个处理字段。
split 基本用法和语法
split(string, array, separator) 接收三个参数:要拆的字符串、存放结果的目标数组(自动创建)、分隔符(支持正则,可省略,默认空格)。函数返回实际拆出的元素个数。
- 数组下标从 1 开始,不是 0(这点和多数语言不同)
- 如果分隔符是正则(如
"[,:;]"),需用双引号包裹 - 原字符串不会被修改,只是读取解析
拆分单列字段的典型场景
比如输入是一行 CSV 风格数据:apple,banana,cherry,date,存在 中:
{ n = split($1, parts, ",") }
执行后:parts[1]="apple",parts[2]="banana",n==4。之后可遍历:for(i=1; i。
处理含空字段或连续分隔符
默认情况下,split("a,,b", a, ",") 会得到 a[1]="a"、a[2]="b",中间空字段被跳过。若想保留空项,需用 GNU awk 的 split(string, array, separator, seps) 四参数形式,或改用 FPAT(更推荐)。
- 简单兼容写法:用
gsub(/^,+|,+$/,"",$1)先清理首尾逗号 - 严格保留空字段:GNU awk 下
split($1, a, ",", seps),然后结合seps数组还原位置
常见错误提醒
容易出错的地方:
- 误写成
split($1, arr, ",")后直接用arr[0]—— 实际第一个元素是arr[1] - 分隔符写成
/,/(斜杠包围)—— 这是正则字面量写法,awk 里应写成"," - 没检查返回值
n就循环,遇到空行或无分隔符时可能越界











