gpt4 book ai didi

for-loop - awk for-in 循环给出意外的输出?

转载 作者:行者123 更新时间:2023-12-04 18:21:09 24 4
gpt4 key购买 nike

我目前正在写 awk bash 脚本中的脚本。我的一个论点需要拆分和循环。例如:对于 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

最佳答案

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,您将获得所需的输出。

我希望这有帮助。

关于for-loop - awk for-in 循环给出意外的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com