如何生成这样的数字序列?

如何生成这样的数字序列?

我试图生成一个数字序列,每隔一次加 1,每隔一次加 39999。列表示例,它可以满足我最多一百万的需求:

1 40000
40001 80000
80001 120000
120001 160000
160001 200000
200001 240000
240001 280000
280001 320000
320001 360000
360000 400000
400001 440000
440001 480000
480001 520000
520001 560000
560001 600000
600001 640000
640001 680000
680001 720000
720001 760000
760001 800000
800001 840000
840001 880000
880001 920000
920001 960000
960001 1000000

我尝试过使用seq,但我没有找到每隔一段时间更改增量的方法。

答案1

使用“手动”输出序列

i=0
while [ "$i" -lt 1000000 ]; do
    printf '%d %d\n' "$(( i+1 ))" "$(( i += 40000 ))"
done

或者

for (( i = 1; i < 1000000; i += 40000 )); do
    printf '%d %d\n' "$i" "$(( i + 39999 ))"
done

或类似的东西。

或者paste将两个单独的序列放在一起seq

$ paste <( seq 1 40000 1000000 ) <( seq 40000 40000 1000000 )
1       40000
40001   80000
80001   120000
120001  160000
160001  200000
200001  240000
240001  280000
280001  320000
320001  360000
360001  400000
400001  440000
440001  480000
480001  520000
520001  560000
560001  600000
600001  640000
640001  680000
680001  720000
720001  760000
760001  800000
800001  840000
840001  880000
880001  920000
920001  960000
960001  1000000

由 JdeBP 建议在评论中:

jot - 1 1000000 40000 | awk '{ print $1, $1+39999 }'

但它本质上与顶部的第二个循环相同,因为seq在 Linux 机器上更容易使用(jot最初是一个 BSD 实用程序,而seq是 GNU coreutils 的一部分),并且这里最常见的访问者是 Linux 用户,并且问题被标记为,它可能更有用地写为

seq 1 40000 1000000 | awk '{ print $1, $1+39999 }'

答案2

享受单一AWK表达:)

awk 'BEGIN{ while (c < 1000000) print (++c, c += 39999) }'
  • ++c-增量变量

输出:

1 40000
40001 80000
80001 120000
120001 160000
160001 200000
200001 240000
240001 280000
280001 320000
320001 360000
360001 400000
400001 440000
440001 480000
480001 520000
520001 560000
560001 600000
600001 640000
640001 680000
680001 720000
720001 760000
760001 800000
800001 840000
840001 880000
880001 920000
920001 960000
960001 1000000

答案3

我认为这可以大大简化,

for i in $(seq 0 24); do
  printf "$(($i * 40000 + 1)) $((($i+1) * 40000))\n";
done;

1 40000
40001 80000
80001 120000
120001 160000
160001 200000
200001 240000
240001 280000
280001 320000
320001 360000
360001 400000
400001 440000
440001 480000
480001 520000
520001 560000
560001 600000
600001 640000
640001 680000
680001 720000
720001 760000
760001 800000
800001 840000
840001 880000
880001 920000
920001 960000
960001 1000000

相关内容