次のリストをどのように作成できますか?
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
私が走る場所command 15
や何か。または、私が指定した場合は、100
100個の数字を使用するか、10000
10000個の数字でこれを作成します。
各行には、上記のように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