我在awk中使用match(string,/regex/,array)
或strip(string,array,/regex/)
,我想知道array
的长度
这里长度((工作
awk 'BEGIN{a[1]="sometext";print length(a)}'
output: 1
这里它不起作用
awk 'BEGIN{
str="some text simple test";
match(str,/(test)/,a);
print "a[1]: "a[1];
print length(a)
}'
output:
a[1]: test
6
奇怪的是它增加了长度
awk 'BEGIN{
str="some text simple test";
match(str,/(test)/,a);
print "a[1]: "a[1];
print "a[2]: "a[2];
print length(a)
}'
output:
a[1]: test
a[2]:
7
为什么 length(( 不起作用并给出奇怪的输出
大多找到了原因:但即使a[2]不存在,也无法解开,但它创造了一个新的。理想情况下,如果不存在,则不应创建变量。它的评论行
$ awk 'BEGIN{
str="some text simple test";
match(str,/simple (test)/,a);
print "a[0]: "a[0];
print "a[1]: "a[1];
print "a[2]: "a[2]; # a[2] does not exist, but its creating a new one. Ideally it should not create a variable if does not exist
print "length(a): "length(a)
k = 0
for(i in a){
print "["i"]: "a[i]
k++
}
print "length: "k
print "RLENGTH::"RLENGTH
print "RSTART::"RSTART
}'
OUTPUT:
a[0]: simple test
a[1]: test
a[2]:
length(a): 7
[0start]: 11
[0length]: 11
[1start]: 18
[1length]: 4
[0]: simple test
[1]: test
[2]:
length: 7
RLENGTH::11
RSTART::11
awk 的 match(( 为每个匹配的组设置 startindex 和 endindex。像往常一样,元素 #0 设置为整个模式。因此,您将获得组 0(整个字符串(的三个项目,组 1(匹配的组(包含开始、长度和值。检查此内容的输出:
gawk 'BEGIN{str="some text simple test"; match(str, /(test)/, a); for (i in a) print i":"a[i]}'
0start:18
0length:4
1start:18
1length:4
0:test
1:test
首先,wrt 这里奇怪的是它增加了长度,实际上并不奇怪,只是引用array[subscript]
几乎与array[subscript]=""
相同。
为什么length(( 不起作用并给出奇怪的输出,但它正在工作。高克手册 说:
match(s, r [, a])
。
如果提供了数组
a
,则a
清除,然后1
到n
的元素填充匹配的s
部分r
中相应的括号子表达式。a
的第零个元素包含与整个正则表达式r
匹配的s
部分。下标a[n, "start"]
和a[n, "length"]
在字符串中提供起始索引和 每个匹配子字符串的长度。
因此,length
也算a[0,"start"]
,a[0,"length"]
等。