我们如何在awk中制作数组?

时间:2018-12-04 17:49:12

标签: arrays awk

{
    k = 0
    x = 0
    fracon = (10/2)+1
    {
        for (j = 1; j <= 1100 ; j++)
        {
            if (j <= fracon)
                scal[j]= j-x

            else
                k= k + 1
            scal[j]= j - (2*k)
            {
                if (scal[j] == 1)
                    fracon= fracon+11
                {
                    if (j % 11 == 0)
                        x=x+11
                    k=k+0.5
                }
            }
        }
    }
}

仅此而已。我使用上面的代码来生成以下数组。它可以在Matlab中工作,但不能在awk中工作。

array= [1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6]

1 个答案:

答案 0 :(得分:0)

这是生成相同序列的另一种方法

$ awk 'BEGIN{for(i=0;i<=20;i++) {k=i%11+1; printf "%s ", (k<7?k:12-k)}; print ""}'

1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 

不确定是否要在11个元素周期内重复执行所要的操作;基于有限的样本很难说。

或不包含awk

$  yes $({ seq 6; seq 5 -1 1; } | paste -sd' ') | head -100 | paste -sd' '

1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 ...

带有方括号

$ awk 'BEGIN{printf "["; 
             for(i=0;i<=1100;i++) {k=i%11+1; printf "%s ", (k<7?k:12-k)}; 
             printf "]\n"}'

[1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 ... 5 4 3 2 1 ]

将这些值填充到大数组中并不是最佳选择,您可以编写一个函数轻松返回索引值

$ awk 'function k(i,_i) {_i=i%11+1; return _i<7?_i:12-_i}  
       BEGIN{for(i=0;i<=25;i++) print k(i)}'

在实际代码中,您将使用k(i)而不是打印。请注意,数组索引从0开始。

_iawk函数中的局部变量;您无需在调用语法中使用。