
我運行以下命令來產生 10 億個隨機數字:
time shuf -i 1-1000000000 > "SHUF TEST 1"
令我驚訝的是,它能夠在不到 10 分鐘的時間內完成此操作。然後,我運行輸出檔案以uniq -d
確定生成的數字中有多少是重複的,當結果為 0 時,我再次感到驚訝。uniq -u
sort -u
該命令如何shuf
能夠在如此相對較短的時間內產生十億個隨機數,我可以依賴它的隨機性嗎?請注意,我不需要加密安全的隨機數產生器來滿足我的需求,只需足夠好的東西來始終返回唯一的數字。
答案1
此shuf
實用程式透過輸出其輸入行的隨機排列來打亂其輸入。根據它的手冊頁,「每個輸出排列都是同等可能的」。打個比方,洗一副牌。
如果輸入行包含重複項,則輸出shuf
也會包含重複項。為什麼?因為shuf
對其輸入執行隨機排列。如果輸入行不包含重複項,則輸出shuf
將不包含重複項。
在您的範例中shuf -i 1-1000000000
,該-i
選項會導致shuf
其輸入好像來自包含無符號十進制整數範圍 1 到 1000000000 的文件,每行一個無符號整數。換句話說,shuf
就好像它有 1000000000 行輸入,每行包含一個唯一的無符號整數。因此,在輸出中找不到重複項。