awk 中的split(string, array, separator)
可以使用空格序列作为分隔符(或者更常见的是任何正则表达式作为分隔符)吗?
显然,可以使用内部autosplit(在输入的每一行上运行FS
变量的值作为分隔符)并使用简单的for
和$0
魔法执行特技。但是,我只是想知道使用split
本身是否有更简单的方法。
答案 0 :(得分:2)
从GNU awk(1)手册页:
split(s, a [, r])
将字符串s拆分为正则表达式r上的数组a,并返回字段数。如果省略r,则改为使用FS。
这里的要点是你可以使用任何正则表达式来执行字段拆分 - 至少你可以使用gawk。如果您正在使用其他内容,则需要查看文档。
答案 1 :(得分:2)
split(string, array, fieldsep)
这将字符串分成由fieldsep分隔的片段,并存储 数组中的碎片。第一部分存储在数组[1]中,第二部分存储在数组[1]中 片段[2],等等。第三个字符串的值 参数 fieldsep,是一个正则表达式 ,描述了拆分字符串的位置(很多 因为FS可以是描述在哪里拆分输入记录的正则表达式。如果 省略fieldsep,使用FS的值。 split返回 创建的元素数量。然后,split函数拆分字符串 以与输入线分割方式类似的方式分段 字段
这是一个简短(有些愚蠢)的示例,它使用一个简单的正则表达式 ".s "
,它将匹配任何单个字符,后跟小写s
和空格。拆分的结果放入数组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()
解析一行的示例。此page包含使用正则表达式将数据拆分为的示例
一个数组。