有没有办法在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
问题是我的文件中没有修复字段,有时字段在每一行都有所不同,所以即使像length(array)/NF
有什么解决方案吗?
答案 0 :(得分:2)
使用GNU awk,因为它有真正的mufti维数组:
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
答案 1 :(得分:1)
这可以通过计算数组中的唯一索引来实现,尝试类似这样的
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