このような数字を含むリストをどのように作成できますか?

このような数字を含むリストをどのように作成できますか?

次のリストをどのように作成できますか?

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呼び出さない2番目のものと似ています。)

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

2番目と3番目の解決策は、私が正しく覚えている場合は、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

前にゼロを付けても大丈夫なら:

$ 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

これらの1つは、数値を入力として使用し、そのリストを印刷する関数にすることができます。例えば、

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 

関連情報