2012-06-23 58 views
1

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

显然,人们可以使用内部自动分割(在输入的每一行上运行,值为FS变量作为分隔符),并使用简单的for$0魔术。不过,我只是想知道是否有更简单的方法使用split本身。

+1

你能告诉我们你要完成什么任务,并提供一些输入/输出样本。可能会有拆分的替代方案。 – Levon

回答

2

The GNU Awk User's Guide状态:

split(string, array, fieldsep) 

这就将字符串转换成由fieldsep分离件,并且存储在数组中的 件。第一部分存储在数组[1]中,第二部分 存储在数组[2]中,等等。第三个参数的字符串值,fieldsep,是一个正则表达式,描述了拆分字符串的位置(很多 ,因为FS可以是描述拆分输入记录的位置的正则表达式)。如果 省略了fieldsep,则使用FS的值。分割返回创建的元素数 。分割功能,那么,分割字符串 成碎片的方式类似于输入线被分成 字段

下面是一个使用一个简单的正则表达式短(有点傻)示例的方式".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包含使用正则表达式将数据拆分为数组的示例。

2

从GNU AWK(1)手册页:

split(s, a [, r]) 

拆分字符串s插入正则表达式r处的阵列的,并返回字段的数量。如果r省略,则使用FS。

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

+0

'man'页面的GNU扩展部分仅引用空字符串来分割单个字符。通常使用正则表达式'FS'和'split()'不是扩展名。 –