我想在每4个空格后添加新行

时间:2016-12-01 20:25:07

标签: perl

我正在生成20个数字然后我正在改变它

perl -e 'foreach(1..20){print  ",$_ "} '  
    | perl -MList::Util=shuffle -F',' -lane 'print shuffle @F' 

,输出为: -

19 15 11 9 8 13 18 4 2 7 5 20 10 14 3 16 1 17 6 12 

现在我希望输出像这样: -

19 15 11 9

8 13 18 4

2 7 5 20

...

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:3)

在命令行中的几个步骤中执行此操作是很奇怪的。你可以在一个程序中完成它。

use strict;
use warnings;
use List::Util 'shuffle';

my $count = 1;
foreach my $i ( shuffle 1 .. 20) {
    print "$i ";
    print "\n\n" unless $count++ % 4;
}

直接将1到20的列表混洗,然后打印每个项目,但每四个后打印两个换行符。 %是模运算符,它将除法的剩余部分返回4.因此,只要$count可被4整除,它就会返回0,并且print会启动。命令行就像这样:

$ perl -MList::Util=shuffle -e '$c=0; for (shuffle 1..20) { print"$_ "; print "\n\n" unless $c++%4}'

这是输出:

11 20 8 17 

10 18 19 6 

1 14 7 5 

13 16 4 3 

9 2 15 12 

答案 1 :(得分:3)

您也可以使用splice来调整shuffle列表的结果,如果您不想编写明确的计数器,请按照这种方式打印。像这样:

perl -MList::Util=shuffle -e '@list=shuffle(1..20); while (@ret_line = splice(@list, 0, 4)) {print "@ret_line\n\n"}'

答案 2 :(得分:0)

我将这些数字放入一个数组中并使用splice以四个为一组删除它们:

use strict;
use warnings 'all'

use List::Util 'shuffle';

my @nums = shuffle 1 .. 20;
print join(" ", splice @nums, 0, 4), "\n\n" while @nums;