sort -R命令不会在Linux中随机对行进行排序

时间:2009-02-11 15:01:41

标签: linux bash sorting

我无法使用--random-sort在Fedora Linux系统上使用sort命令。

一些背景信息:

$ cat /etc/fedora-release
Fedora release 7 (Moonshine)
$ which sort
/bin/sort
$ man sort | grep -A 2 '\-R'
       -R, --random-sort
              sort by random hash of keys

$ man sort | grep -A 3 '\-R'
       -R, --random-sort
              sort by random hash of keys

       --random-source=FILE

测试:

$ echo -e "2\n1\n3\n5\n4"
2
1
3
5
4
$ echo -e "2\n1\n3\n5\n4" | sort -r # Sort in reverse order
5
4
3
2
1
$ echo -e "2\n1\n3\n5\n4" | sort -R # Sort in random order
1
2
3
4
5
$ # Fail! That's not random (I've tried it multiple times.)

4 个答案:

答案 0 :(得分:16)

它适用于我的Ubuntu 8.04机器。也许问题是randoms的来源。从手册:

  

- 随机源= FILE

         get random bytes from FILE (default /dev/urandom)
# this should give always the same result:
echo -e '2\n1\n3\n5\n4' | sort -R --random-source=/dev/zero

# this should be random:
echo -e '2\n1\n3\n5\n4' | sort -R --random-source=/dev/urandom

答案 1 :(得分:9)

从GNU coreutils手册:

  

通过散列输入键进行排序,然后对哈希值进行排序。随机选择哈希函数,确保它没有冲突,以便不同的键具有不同的哈希值。这就像输入的随机排列(参见shuf调用),除了具有相同值的键排序

     

如果指定了多个随机排序字段,则对所有字段使用相同的随机散列函数。要对不同的字段使用不同的随机散列函数,可以多次调用排序。

GNU sort -R采用相同的输入并将其整合在一起;该主题可能提供一些替代方案:How can I randomize the lines in a file using standard tools on Red Hat Linux?

答案 2 :(得分:2)

我不知道bash是否以这种方式工作,但是在ksh中有“whence”命令,它告诉你如果要将参数键入为命令将会执行什么,而“which”只是告诉你第一个$ PATH中命令的实例。例如:

wembley 0 /home/jj33 > which ls
/bin/ls
wembley 0 /home/jj33 > whence ls
'/bin/ls -FC'

我怀疑这是你的问题,但是下一个故障排除步骤是在执行时为“sort”指定确切的路径(或使用反斜杠转义可能的别名):

$ echo -e "2\n1\n3\n5\n4" | /bin/sort -R

之后,我可能会怀疑环境或语言环境设置令人不快。不一定重要,但LC_ *变量通常会产生意想不到的副作用(我在新盒子上做的第一件事就是设置LC_ALL = C将它全部关闭=)。

答案 3 :(得分:1)

我知道这是一篇很老的帖子,但这个解决方案效果很好......以防万一有人在看

dir='/home/path-to-folder'
cd $dir
file=`ls |sort -R |tail --lines=1` 
echo $file