이러한 일련의 숫자를 생성하는 방법은 무엇입니까?

이러한 일련의 숫자를 생성하는 방법은 무엇입니까?

매번 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

또는 그런 것.

또는 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 }'

그러나 Linux 시스템( 원래는 BSD 유틸리티 이지만 GNU coreutils의 일부) seq에서 사용하기가 더 쉽고 여기에서 가장 일반적인 방문자는 Linux 사용자이므로 질문은 맨 위의 두 번째 루프와 본질적으로 동일합니다. 로 표시됨jotseq, 다음과 같이 작성하는 것이 더 유용할 수 있습니다.

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

관련 정보