gpt4 book ai didi

linux - 从每个数组中交替打印十个值,直到它们都为空

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:42 24 4
gpt4 key购买 nike

假设我有以下脚本,它遍历两个数组并打印它们之间交替的值。我为脚本提供以下文件:

1 2
1 2
1 2
1 2
1 2
1 2

Awk 脚本:

BEGIN{ FS = "\t" }
{ a[o++]=$1; b[c++]=$2 }
END{ while (++co <= 5 ) {
for ( k = 1+count; k <= 2+count; k++ ){ if (length(a) >= 0){ print a[k]; delete a[k]} }
for ( ki = 1+count; ki <= 2+count; ki++ ){ if (length(b) >= 0){ print b[ki]; delete b[ki] } }
count = k
}
}

我希望输出是

1
1
2
2
1
1
2
2
1
1
2
2

但我得到的是:

1
1
2
2
1
1
2
2

(followed by blank lines but they are not my issue)

那么如何让它运行直到两个数组都为空并且所有内容都被打印出来。以及如何使其工作,即使数组大小不同,例如例如,一个包含的值比另一个多 20 个。因此,应该只打印这些值,直到数组为空。

最佳答案

wrt 如何让它运行直到两个数组都为空 - 无需删除数组内容。

wrt 应该只打印这些值,直到数组为空 - “ array is empty”可能意味着只打印两个数组中存在的索引处的值( “第一个 数组是空的”)或者它可能意味着打印两个数组中的所有值(“两个数组 都是空的”)。下面的脚本假定是后者,但很容易调整为执行前者(将 || 更改为 &&)。

$ cat tst.awk
{ a[++maxA]=$1; b[++maxB]=$2 }
END {
while ( (prevEnd<maxA) || (prevEnd<maxB) ) {
prt(a)
prevEnd = prt(b)
}
}

function prt(arr, idx) {
for (idx=prevEnd+1; idx<=prevEnd+2; idx++) {
if (idx in arr) {
print arr[idx]
}
}
return (idx-1)
}

$ awk -f tst.awk file
1
1
2
2
1
1
2
2
1
1
2
2

关于linux - 从每个数组中交替打印十个值,直到它们都为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55336470/

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