可以split(string, array, separator)
awk使用空格序列作为分隔符(或更一般地说任何正则表达式作为分隔符)?awk按空白序列分割
显然,人们可以使用内部自动分割(在输入的每一行上运行,值为FS
变量作为分隔符),并使用简单的for
和$0
魔术。不过,我只是想知道是否有更简单的方法使用split
本身。
可以split(string, array, separator)
awk使用空格序列作为分隔符(或更一般地说任何正则表达式作为分隔符)?awk按空白序列分割
显然,人们可以使用内部自动分割(在输入的每一行上运行,值为FS
变量作为分隔符),并使用简单的for
和$0
魔术。不过,我只是想知道是否有更简单的方法使用split
本身。
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包含使用正则表达式将数据拆分为数组的示例。
从GNU AWK(1)手册页:
split(s, a [, r])
拆分字符串s插入正则表达式r处的阵列的,并返回字段的数量。如果r省略,则使用FS。
这里的重点是,你可以使用任何正则表达式来执行字段拆分 - 至少你可以用gawk。如果你使用其他的东西,你需要检查你的文档。
'man'页面的GNU扩展部分仅引用空字符串来分割单个字符。通常使用正则表达式'FS'和'split()'不是扩展名。 –
你能告诉我们你要完成什么任务,并提供一些输入/输出样本。可能会有拆分的替代方案。 – Levon