2016-12-01 90 views
0

我生成20號和後添加新的一行話,我洗牌它我想每4位

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

這樣做在命令行中的幾個步驟是...奇怪。你可以在一個程序中完成。

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 
+0

感謝兄弟!!!!真的很感謝 – Sonal

+0

我使用這個查詢來產生一些數字,然後每行僅打印10個數字: - perl -e'foreach(1000..1100){$ temp = int rand(999); push @rand,$ temp ;} while(@arr = splice(@rand,0,10)){print「@arr \ n」};'現在我想確保所有3位數的數字應該從0開頭追加,例如 - 341變爲0341 – Sonal

+0

我正在使用這個:-perl -e'foreach(1000..1100){$ temp = int rand(9999 );推@rand,$ temp;} foreach(@rand){printf「%04d」,拼接(@ rand,0,10)}' 但概率只有1行是打印不是所有行 – Sonal

3

你也可以使用一個splice通話,只要你想砍shuffle列表的結果,並打印這樣的說法,如果你不想編寫一個明顯的計數器。事情是這樣的:

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

我會在@line = splice(@list,0,4)時使第二部分變成'print'@line \ n \ n「來縮短它的長度。 – simbabque

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;