이와 같은 숫자가 포함된 목록을 어떻게 만들 수 있나요?

이와 같은 숫자가 포함된 목록을 어떻게 만들 수 있나요?

다음과 같은 목록을 어떻게 만들 수 있습니까?

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

내가 달리는 곳 command 15이나 뭔가. 또는 내가 지정하면 100100개의 숫자를 사용하거나 1000010000개의 숫자로 이렇게 만들 것입니다.

각 행에는 위에 표시된 대로 5개의 숫자가 있어야 합니다.

답변1

넌 그냥 그래

seq 1 n | xargs -n 5 echo

n은 연락하려는 번호입니다.

OS에 bash가 있지만 seq가 없는 경우 대안이 있습니다(의견을 주신 @cuonglm 및 @jimmyj에게 감사드립니다)

echo {1..n} | xargs -n5

(도착 시 조심해야 할 수도 있습니다.매우OS 및 bash 버전에 따라 더 높은 숫자는 bash가 실제로 먼저 확장을 시도하거나 이 경우 전체 1..n을 문자열로 메모리에 가져오려고 시도하지 않고 데이터를 비트 단위로 공급할 만큼 충분히 똑똑한 경우입니다. , 그리고 에코를 제공합니다...)

cuonglm 및 StephaneChazelas 덕분에 첫 번째 xargs 솔루션보다 매우 적은 CPU 리소스를 사용하는 대안을 추가했습니다(xargs는 5개 숫자마다 셸의 내장 기능을 사용할 수 있는 대신 /bin/echo를 호출합니다)( xargs가 echo를 호출하지 않는 두 번째 것과 비슷할 것입니다.)

printf '%s %s %s %s %s\n' {1..n}

두 번째와 세 번째 해결책은 내가 올바르게 기억한다면 printf(또는 xargs)가 인쇄를 시작하기 전에 쉘이 먼저 1..n을 확장한다는 점에서 첫 번째 해결책과 다릅니다.... ..그래서 나중에 시작됩니다(특히 n이 다음과 같은 경우). 대형)...그리고할 수 있다n이 크면 일부 제한(구현 및 운영 체제에 따라 줄 길이 또는 메모리)에 도달합니다.

답변2

순수한 coreutils:

$ seq 15 | paste - - - - - 
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15

순수 펄:

$ perl -e '@a=1..15; while($i<=$#a){print "@a[$i..$i+4]\n";$i+=5}'
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

GNU grep(뻔뻔한@1_CR에서 도난당함):

$ echo {1..15} | grep -oP '(\d+ ){4}\d+'
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

앞에 0을 붙여도 괜찮다면:

$ echo {01..15} | fold -sw 16
01 02 03 04 05 
06 07 08 09 10 
11 12 13 14 15

이렇게 하면:

$ echo {01..15} | fold -sw 16 | sed 's/0\([1-9]\) /\1 /g'
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15

이들 중 하나는 숫자를 입력으로 사용하고 해당 목록을 인쇄하는 함수로 만들 수 있습니다. 예를 들어,

printnums(){
 seq $1 | paste - - - - - 
}

그럼 당신은 실행할 수 있습니다

$ printnums 30
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20
21  22  23  24  25
26  27  28  29  30

답변3

그리고 printf그리고버팀대 확장:

printf '%s %s %s %s %s\n' {1..15}

답변4

루프를 사용하십시오.

for x in {1..15};do echo -n "$x ";if [ $(($x%5)) -eq 0 ];then echo ; fi done

산출:

1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 

관련 정보