如何构建包含这样的数字的列表?

如何构建包含这样的数字的列表?

我如何构建这样的列表:

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

我跑步的地方command 15或者什么的。或者,如果我指定100它会使用 100 个数字,或者10000会使其像这样但有 10000 个数字。

每行应该有五个数字(如上所示)。

答案1

你只是做

seq 1 n | xargs -n 5 echo

n 是您想要联系的号码

如果您的操作系统有 bash 但没有 seq,这里有一个替代方案(感谢 @cuonglm 和 @jimmyj 的评论)

echo {1..n} | xargs -n5

(到达时您可能必须小心非常较高的数字,具体取决于操作系统和 bash 版本,如果 bash 实际上尝试首先扩展,或者在这种情况下足够聪明,可以一点一点地提供数据,而无需尝试将整个 1..n 作为字符串放入内存中,并且喂它来回声......)

感谢 cuonglm 和 StephaneChazelas,我添加了一个替代方案,它比我的第一个 xargs 解决方案占用的 CPU 资源非常非常少(其中 xargs 调用 /bin/echo,而不是能够使用 shell 的内置函数,每 5 个数字)(它是可能类似于第二个,其中 xargs 不调用 echo) :

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

第二个和第三个解决方案与第一个解决方案的不同之处在于,如果我没记错的话,shell 首先要扩展 1..n,然后 printf (或 xargs) 才能开始打印......所以它会稍后启动(特别是如果 n 是大)...并且可以如果 n 很大,就会达到一些限制(行长度或内存,取决于实现和操作系统)。

答案2

纯的coreutils

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

纯 Perl:

$ 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 

相关内容