while read line;do echo $RANDOM $line; done < file | sort -n | sed 's/[^ ]\+ //'
這裏取了個巧而已。雖然也能實現需求,但是如果遇到大文件,本身 shell 的效率是很低的。偶然得知系統本身有一個命令是專職幹這事兒的,那就是 shuf 命令,那效率,是槓槓滴啊。簡單介紹下:
1. 這個命令屬於 coreutils 包,如果系統沒有此命令,請 yum install coreutils 進行安裝。2. 它也能夠接受標準輸入,即管道
參數:
-n 最多顯示多少行
-o 將隨機排序後的輸出寫到一個文件中
更多信息請參考man頁。
另外,今天發現用 sort -R也可以隨機排序,只是效率比shuf稍微慢一點兒!man sort 的解釋如下:
-R, --random-sort
sort by random hash of keys
2013.11.13 更新
1. 在centos 5.5下,sort版本爲sort (GNU coreutils) 5.97,沒有-R選項
2. 在centos 6.4下,sort版本爲sort (GNU coreutils) 8.4,有-R選項。
3. shuf 和 sort命令同屬於coreutils 包。
更多信息請參考:http://www.gnu.org/software/coreutils/manual/coreutils.html#sort-invocation