AWK嵌套for循环,“10-89小于9?”

时间:2014-12-09 13:54:15

标签: for-loop awk nested

我正在尝试在AWK中使用嵌套的for循环,但似乎我遇到了数组和变量的数字比较问题。

示例:

创建数组

str[0]="a"; str[1]="b"; str[2]="c"; str[3]="d"; str[4]="e";
str[5]="f"; str[6]="g"; str[7]="h"; str[8]="i"; str[9]="j";
str[10]="k"; str[11]="l"; str[12]="m"; str[13]="n"

打印内容,每行一个索引,每行缩进

for(i in str) {
  printf "index " i ":"
  for(j=0;j<=i;j++) {
    printf "<tab " j ">"
  }
  printf str[i] "\n"
}

输出

index 0:<tab 0>a
index 1:<tab 0><tab 1>b
index 2:<tab 0><tab 1><tab 2>c
index 3:<tab 0><tab 1><tab 2><tab 3>d
index 4:<tab 0><tab 1><tab 2><tab 3><tab 4>e
index 5:<tab 0><tab 1><tab 2><tab 3><tab 4><tab 5>f
index 6:<tab 0><tab 1><tab 2><tab 3><tab 4><tab 5><tab 6>g
index 7:<tab 0><tab 1><tab 2><tab 3><tab 4><tab 5><tab 6><tab 7>h
index 8:<tab 0><tab 1><tab 2><tab 3><tab 4><tab 5><tab 6><tab 7><tab 8>i
index 9:<tab 0><tab 1><tab 2><tab 3><tab 4><tab 5><tab 6><tab 7><tab 8><tab 9><tab 10><tab 11><tab 12><tab 13><tab 14><tab 15><tab 16><tab 17><tab 18><tab 19><tab 20><tab 21><tab 22><tab 23><tab 24><tab 25><tab 26><tab 27><tab 28><tab 29><tab 30><tab 31><tab 32><tab 33><tab 34><tab 35><tab 36><tab 37><tab 38><tab 39><tab 40><tab 41><tab 42><tab 43><tab 44><tab 45><tab 46><tab 47><tab 48><tab 49><tab 50><tab 51><tab 52><tab 53><tab 54><tab 55><tab 56><tab 57><tab 58><tab 59><tab 60><tab 61><tab 62><tab 63><tab 64><tab 65><tab 66><tab 67><tab 68><tab 69><tab 70><tab 71><tab 72><tab 73><tab 74><tab 75><tab 76><tab 77><tab 78><tab 79><tab 80><tab 81><tab 82><tab 83><tab 84><tab 85><tab 86><tab 87><tab 88><tab 89>j
index 10:<tab 0><tab 1>k
index 11:<tab 0><tab 1>l
index 12:<tab 0><tab 1>m
index 13:<tab 0><tab 1>n

打印输出显然保持 i = 10 ,但即使 j 变为 11 [for(j = 0; j <= i; j ++)] < /强>

有什么建议吗? :)

1 个答案:

答案 0 :(得分:2)

<强>问题

j<=i进行字符串比较。因此10小于911, 12...89

等等

<强>解决方案

您可以通过向字符串添加0来将string的值强制转换为整数。那是

j<=i+0

awk在数据i

上转换为int
for(i in str) {
  printf "index " i ":"
  for(j=0;j<=i+0;j++) {
    printf "<tab " j ">"
  }
  printf str[i] "\n"
}

Read more on awk type conversions