如何在awk多维数组中获得1个方向的数组维数

时间:2014-05-26 16:34:22

标签: 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,其中包含每个字段作为实体,我的兴趣是获取数组中有多少行,在我的实际代码中我有n个字段设置数组如此

             for(i=1;i<=NF;i++)A[FNR,i]=$i

问题是我的文件中没有修复字段,有时字段在每一行都有所不同,所以即使像length(array)/NF

这样我也无法计算

有什么解决方案吗?

2 个答案:

答案 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/awknawk