awk for-in循环给出意想不到的输出?

时间:2012-05-19 14:19:54

标签: for-loop awk for-in-loop

我目前正在bash脚本中编写awk脚本。我的一个论点需要拆分和循环。例如:对于1234的参数,我需要按照所写的顺序循环遍历每个数字。因此,2413并不等同。

我使用split创建一个数组,然后使用for-in循环来遍历数组。我认为它会按顺序循环,但事实并非如此。

我的代码如下:

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

cols使用awk选项传递给-v命令,并提供以下输出:

4
1
2
3

经过几次测试,使用不同长度的参数并同时使用数字和字母,似乎for循环从数组的元素4开始,按顺序循环到结尾,然后循环通过元素1到3,而不是预期从元素1开始并循环到结束。

是否有改变行为或我做错了什么?

编辑为了澄清,我在xubuntu 11.10中使用gawk

1 个答案:

答案 0 :(得分:4)

awk中的

数组不一定(必然)按原始来源的顺序存储。

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

这是一个解释问题的解决方案

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正在打印键而不是关联数组的值。

如果您在我的示例中编辑ABCD,到1234,您将获得您正在寻找的输出。

我希望这会有所帮助。