shuf 命令: 隨機排序文件

      有時候我們需要將文本的順序打亂,也就是隨機排序,我以前的做法是寫個shell,利用 bash 裏的內置變量 $RANDOM 進行排序,然後打印。代碼如下:
	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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章