我无法使用--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.)
答案 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