sort -R命令不会在Linux中随机排列行

我无法使用–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 

和testing:

 $ 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.) 

Solutions Collecting From Web of "sort -R命令不会在Linux中随机排列行"

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

–random源= 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 

从GNU coreutils手册:

对输入键进行散列,然后对散列值进行排序。 随机选择散列函数,确保没有冲突,以便不同的键具有不同的散列值。 这就像输入的随机置换(参见shuf调用), 只是具有相同值的键排序在一起

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

GNU sort -R采用相同的输入并将其结合在一起; 这个线程可能会提供一些选择: 我如何使用Red Hat Linux上的标准工具来随机化文件中的行?

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

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

我怀疑这是你的问题,但下一个故障排除步骤是指定确切的路径(或逃避一个反斜杠可能的别名)“排序”,当你执行它:

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

之后,我可能会怀疑环境或场所设置,使得它不可靠。 不一定非常重要,但LC_ *变量通常会有意想不到的副作用(我在新盒子上做的第一件事情是将LC_ALL = C设置为关闭=))。

我知道这是一个旧的帖子,但这个解决方案工作得很好…以防万一有人在寻找

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