これらの一連の数字を生成するには?

これらの一連の数字を生成するには?

毎回1を追加し、毎回39999を追加する一連の数値を生成しようとしています。私の要件を最大100万個まで満たすことができるリストの例:

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

またはそのようなもの。

または、paste2つの別々のシーケンスを一緒に配置します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 }'

しかし、Linuxシステム(もともとはBSDユーティリティですが、GNU coreutilsの一部)seqでより使いやすく、ここで最も一般的な訪問者はLinuxユーザーなので、質問は一番上の2番目のループと本質的に同じです。と表示されるjotseq、次のように書くと便利です。

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

おすすめ記事