linux下shuf命令随即排序shuf -n1 a.txt

来源:互联网 发布:淘宝卖家订单险多少钱 编辑:程序博客网 时间:2024/05/21 00:49
      有时候我们需要将文本的顺序打乱,也就是随机排序,我以前的做法是写个shell,利用 bash 里的内置变量 $RANDOM 进行排序,然后打印。代码如下:
[java] view plain copy
  1. 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 的解释如下:

[plain] view plain copy
  1. -R, --random-sort  
  2.        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 包。

原创粉丝点击