可以split(string, array, separator)
在awk中 使用空格序列作为分隔符(或更一般地说,任何正则表达式作为分隔符)?
显然,可以使用内部自动拆分(在输入的每一行上运行,FS
变量的值作为分隔符),并且使用简单for
而$0
神奇的方法来解决问题。但是,我只是想知道是否有更直接的方法使用它split
本身。
可以split(string, array, separator)
在awk中 使用空格序列作为分隔符(或更一般地说,任何正则表达式作为分隔符)?
显然,可以使用内部自动拆分(在输入的每一行上运行,FS
变量的值作为分隔符),并且使用简单for
而$0
神奇的方法来解决问题。但是,我只是想知道是否有更直接的方法使用它split
本身。
从 GNU awk(1) 手册页:
split(s, a [, r])
将字符串 s 拆分为正则表达式 r 上的数组 a,并返回字段数。如果省略 r,则使用 FS。
这里的重点是您可以使用任何正则表达式来执行字段拆分——至少您可以使用 gawk。如果您使用其他东西,则需要检查您的文档。
GNU Awk 用户指南指出:
split(string, array, fieldsep)
这将字符串分成由fieldsep分隔的片段,并将这些片段存储在数组中。第一部分存储在数组 [1] 中,第二部分存储在数组 [2] 中,依此类推。第三个参数fieldsep的字符串值是一个描述在哪里分割字符串的正则表达式(就像FS可以是一个描述在哪里分割输入记录的正则表达式)。如果省略 fieldsep,则使用 FS 的值。split 返回创建的元素数。然后, split 函数以类似于将输入行拆分为字段的方式将字符串拆分为片段
这是一个简短(有点傻)的示例,它使用一个简单的正则表达式 ".s "
来匹配任何单个字符,后跟一个小写字母s
和一个空格。拆分的结果被放入 array a
。请注意,匹配的部分不会放入数组中。
BEGIN {
s = "this isn't a string yes isodore?"
count = split(s, a, ".s ")
printf("number of splits: %d\n", count)
print "Contents of array:"
for (i = 1; i <= count; i++)
printf "a[%d]: %s\n", i, a[i]
}
输出:
$ awk -f so.awk
number of splits: 3
Contents of array:
a[1]: th
a[2]: isn't a string y
a[3]: isodore?
文章Advanced Awk for Sysadmins展示了一个使用split()
. 此页面包含使用正则表达式将数据拆分为数组的示例。