生成一系列以两个交织间隔上升的数字

Generate a series of numbers that go up in two interweaving intervals

假设我想生成一系列数字,首先跳 5,然后 10 一直跳到 100,这将是

0,5,15,20,30,35,45,50,60,65,75,85,90,100

我知道

seq 0 10 100

但我想跳两个不同的区间交织在一起。

您可以使用 2 个 printf 语句生成 2 个列表,然后使用 sort -n:

对组合列表进行排序
{ printf '%d\n' {0..100..15}; printf '%d\n' {5..100..15}; } | sort -un
0
5
15
20
30
35
45
50
60
65
75
80
90
95

假设:

  • 0
  • 开始
  • 通过添加 +5+10+5+10 生成一个数字序列...直到我们 reach/exceed 100

使用 bash 循环的一个想法:

i=0
sum=0

while [[ "${sum}" -le 100 ]]
do
    echo $sum
    ((sum += (i++%2 + 1) * 5))
done

这会生成:

0
5
15
20
30
35
45
50
60
65
75
80
90
95
$ cat tst.awk
BEGIN {
    for ( i=0; i<=100; i+=(++c%2 ? 5 : 10) ) {
        print i
    }
}

$ awk -f tst.awk
0
5
15
20
30
35
45
50
60
65
75
80
90
95

因为 bash 被标记:使用 seq 的步长覆盖整个循环(这里 5+10 = 15)。然后,对于每一行,打印缺少的步骤。

seq 0 15 100 | while read -r n; do printf '%d\n' $n $((n+5)); done
0
5
15
20
30
35
45
50
60
65
75
80
90
95

如果间隔更复杂,那么调用 seq 可以很好地再次嵌套在内部,就像本例中的那样

seq 0 15 100 | while read -r n; do seq $n 5 $((n+5)); done