Arrays 如何在awk多维数组中获得1个方向的数组维数
在Arrays 如何在awk多维数组中获得1个方向的数组维数,arrays,awk,Arrays,Awk,在awk数组中是否有任何方法可以像在php中那样只获取一维长度 看看这个简单的例子 awk 'BEGIN{ a[1,1]=1; a[1,2]=2; a[2,1]=3; a[2,3]=2; print length(a) }' 这里数组的长度是4,其中每个字段都是一个实
awk
数组中是否有任何方法可以像在php中那样只获取一维长度
看看这个简单的例子
awk 'BEGIN{
a[1,1]=1;
a[1,2]=2;
a[2,1]=3;
a[2,3]=2;
print length(a)
}'
这里数组的长度是4,其中每个字段都是一个实体,我的兴趣是得到数组中有多少行,在我的实际代码中,我有n个字段设置数组,如下所示
for(i=1;i<=NF;i++)A[FNR,i]=$i
awk '
function _get_rowlength(Arr,fnumber, i,t,c){
for(i in Arr){
split(i,sep,SUBSEP)
if(!(sep[fnumber] in t))
{
c++
t[sep[fnumber]]
}
}
return c;
}
BEGIN{
a[1,1]=1;
a[1,2]=2;
a[2,1]=3;
a[2,3]=2;
print _get_rowlength(a,1)
}'
对于(i=1;i这可以通过计算数组中的唯一索引来实现,请尝试以下方法
for(i=1;i<=NF;i++)A[FNR,i]=$i
awk '
function _get_rowlength(Arr,fnumber, i,t,c){
for(i in Arr){
split(i,sep,SUBSEP)
if(!(sep[fnumber] in t))
{
c++
t[sep[fnumber]]
}
}
return c;
}
BEGIN{
a[1,1]=1;
a[1,2]=2;
a[2,1]=3;
a[2,3]=2;
print _get_rowlength(a,1)
}'
结果
$ ./tester
2
如果要在Solaris/SunOS
系统上尝试此操作,请将awk
更改为/usr/xpg4/bin/awk
,/usr/xpg6/bin/awk
,或nawk
,这可以通过计算数组中的唯一索引来实现,请尝试以下操作
for(i=1;i<=NF;i++)A[FNR,i]=$i
awk '
function _get_rowlength(Arr,fnumber, i,t,c){
for(i in Arr){
split(i,sep,SUBSEP)
if(!(sep[fnumber] in t))
{
c++
t[sep[fnumber]]
}
}
return c;
}
BEGIN{
a[1,1]=1;
a[1,2]=2;
a[2,1]=3;
a[2,3]=2;
print _get_rowlength(a,1)
}'
结果
$ ./tester
2
如果要在Solaris/SunOS
系统上尝试此操作,请将awk
更改为/usr/xpg4/bin/awk
,/usr/xpg6/bin/awk
,或nawk
,这可以通过计算数组中的唯一索引来实现,请尝试以下操作
for(i=1;i<=NF;i++)A[FNR,i]=$i
awk '
function _get_rowlength(Arr,fnumber, i,t,c){
for(i in Arr){
split(i,sep,SUBSEP)
if(!(sep[fnumber] in t))
{
c++
t[sep[fnumber]]
}
}
return c;
}
BEGIN{
a[1,1]=1;
a[1,2]=2;
a[2,1]=3;
a[2,3]=2;
print _get_rowlength(a,1)
}'
结果
$ ./tester
2
如果要在Solaris/SunOS
系统上尝试此操作,请将awk
更改为/usr/xpg4/bin/awk
,/usr/xpg6/bin/awk
,或nawk
,这可以通过计算数组中的唯一索引来实现,请尝试以下操作
for(i=1;i<=NF;i++)A[FNR,i]=$i
awk '
function _get_rowlength(Arr,fnumber, i,t,c){
for(i in Arr){
split(i,sep,SUBSEP)
if(!(sep[fnumber] in t))
{
c++
t[sep[fnumber]]
}
}
return c;
}
BEGIN{
a[1,1]=1;
a[1,2]=2;
a[2,1]=3;
a[2,3]=2;
print _get_rowlength(a,1)
}'
结果
$ ./tester
2
如果要在Solaris/SunOS
系统上尝试此操作,请将awk
更改为/usr/xpg4/bin/awk
,/usr/xpg6/bin/awk
,或nawk
使用GNU awk,因为它具有真正的多维数组:
awk 'BEGIN{
a[1][1]=1;
a[1][2]=2;
a[1][3]=3;
a[2][1]=4;
a[2][2]=5;
print length(a)
print length(a[1])
print length(a[2])
}'
2
3
2
使用GNU awk,因为它具有真正的多维数组:
awk 'BEGIN{
a[1][1]=1;
a[1][2]=2;
a[1][3]=3;
a[2][1]=4;
a[2][2]=5;
print length(a)
print length(a[1])
print length(a[2])
}'
2
3
2
使用GNU awk,因为它具有真正的多维数组:
awk 'BEGIN{
a[1][1]=1;
a[1][2]=2;
a[1][3]=3;
a[2][1]=4;
a[2][2]=5;
print length(a)
print length(a[1])
print length(a[2])
}'
2
3
2
使用GNU awk,因为它具有真正的多维数组:
awk 'BEGIN{
a[1][1]=1;
a[1][2]=2;
a[1][3]=3;
a[2][1]=4;
a[2][2]=5;
print length(a)
print length(a[1])
print length(a[2])
}'
2
3
2
结果不等于END
块中的FNR
吗?或者您正在打开多个文件吗?您可以将NF
存储为密钥的一部分,awk'{for(i=1;i@jaypal:无需向数组添加额外索引,因为他/她只需要行数…结果不等于END
块中的FNR
吗?或者您正在打开多个文件吗?您可以将NF
存储为键的一部分,awk'{for(i=1;i@jaypal:无需向数组添加额外索引,因为他/她只需要行数…结果不等于END
块中的FNR
吗?或者您正在打开多个文件吗?您可以将NF
存储为键的一部分,awk'{for(i=1;i@jaypal:无需向数组添加额外索引,因为他/她只需要行数…结果不等于END
块中的FNR
吗?或者您正在打开多个文件吗?您可以将NF
存储为键的一部分,awk'{for(i=1;i@jaypal:无需向数组添加额外索引,因为他/她只需要行数。。。