2012-05-19 85 views
2

我目前正在编写一个awk脚本在一个bash脚本中。我的一个论点需要分解和循环。例如:对于1234的参数,我需要按照编写的顺序遍历每个数字。所以,2413不等于。我使用split来创建一个数组,然后循环遍历数组。我认为它会按顺序循环,但事实并非如此。awk for-in循环给出意想不到的输出?

我的代码如下:

split(cols,toShow,"") 
for (c in toShow) 
    printf "%s\n",c 

cols传递给使用-v选项awk命令,并给出了下面的输出:

4 
1 
2 
3 

这个测试了几次后,出现不同参数长度以及使用数字和字母时,似乎for循环开始于数组的元素4,按顺序循环到结尾,然后遍历元素s 1到3,而不是预期从元素1开始并循环到结尾。

无论如何改变行为还是我做错了什么?

EDIT为了清楚起见,我在Xubuntu的11.10

回答

4

阵列在AWK使用gawk不(必须的)存储在从原始源的顺序。

此外,使用数字作为输入被混乱的问题

这里是一个可以说明问题的解决

awk 'END{cols="ABCD";n=split(cols,toShow,"") 
for (i=1;i<=n;i++) 
    printf "%s\n",toShow[i] }' /dev/null 

** **输出

A 
B 
C 
D 

要看到什么我的意思是,编辑你的代码到ABCD,你仍然会输出你的数字,因为for c in toShow正在打印键而不是assoc数组的值。

如果您在我的示例中编辑ABCD至1234,您将得到您要查找的输出。

我希望这会有所帮助。

+0

它输出索引的事实并不重要,因为它仍然显示它不是以正确的顺序输出,但是改为更长的for循环修复了问题,所以谢谢:) –