我目前正在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
答案 0 :(得分:4)
数组不一定(必然)按原始来源的顺序存储。
此外,使用数字作为输入会使问题混乱
这是一个解释问题的解决方案
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,您将获得您正在寻找的输出。
我希望这会有所帮助。