生成一系列以两个交织间隔上升的数字
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
假设我想生成一系列数字,首先跳 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/exceed100
使用 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