1

可以split(string, array, separator)awk中 使用空格序列作为分隔符(或更一般地说,任何正则表达式作为分隔符)?

显然,可以使用内部自动拆分(在输入的每一行上运行,FS变量的值作为分隔符),并且使用简单for$0神奇的方法来解决问题。但是,我只是想知道是否有更直接的方法使用它split本身。

4

2 回答 2

2

从 GNU awk(1) 手册页:

split(s, a [, r])

将字符串 s 拆分为正则表达式 r 上的数组 a,并返回字段数。如果省略 r,则使用 FS。

这里的重点是您可以使用任何正则表达式来执行字段拆分——至少您可以使用 gawk。如果您使用其他东西,则需要检查您的文档。

于 2012-06-23T11:55:04.373 回答
2

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(). 此页面包含使用正则表达式将数据拆分为数组的示例。

于 2012-06-23T11:56:25.410 回答