{
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]
答案 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开始。
_i
是awk
函数中的局部变量;您无需在调用语法中使用。