2

我目前正在awkbash 脚本中编写脚本。我的一个论点需要拆分和循环。例如:对于一个参数,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 开始并循环到结束。

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

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

4

1 回答 1

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打印键而不是 assoc 数组的值一样输出数字输出。

如果您在我的示例中将 ABCD 编辑为 1234,您将获得所需的输出。

我希望这有帮助。

于 2012-05-19T16:02:45.920 回答