GNU sort - 用于比较的默认算法是什么?

时间:2013-05-13 00:53:53

标签: linux sorting gnu gnu-sort

我需要帮助理解GNU排序的默认算法。我假设它做了一个词典排序,但是我发现了一些与之不相符的行为,例如采用以下字符串:

alex.
alex.a
alex.Z
alexa
alex0
alexZ
alex.~
alex
alex.|
alex.}
alex.abc

使用类似echo 'stuff' | sort

的排序在shell上对它们进行排序

这是我得到的结果:

alex
alex.
alex.~
alex.|
alex.}
alex0
alexa
alex.a
alex.abc
alexZ
alex.Z

我无法弄清楚为什么alex0alexa出现在alex.}alex.a之间

有人可以向我解释一下吗?

4 个答案:

答案 0 :(得分:4)

GNU Sort实现了mergesort。您可以在超级用户线程中找到完整的答案。 https://superuser.com/questions/234054/unix-sort-algorithm-implementation

答案 1 :(得分:3)

按大小排序取决于LOCALE设置:

$ sort sort 
alex
alex.
alex.~
alex.|
alex.}
alex0
alexa
alex.a
alex.abc
alexZ
alex.Z
$ LC_ALL=C sort sort
alex
alex.
alex.Z
alex.a
alex.abc
alex.|
alex.}
alex.~
alex0
alexZ
alexa

答案 2 :(得分:0)

尝试对此文件进行“排序InFile.txt”,然后更改第一个单词Start to Begin并解释其中的区别?我一直将LC_LOCAL-C设置为无效。 InFile.txt

Start report    /* Change Start to Begin to see difference */    
MISSING..
NEW file.
Updated files
/home/me/path/To/file.txt
/home/me/path/To/new.txt
/home/me/path/To/old.txt
/home/me/path/To/lost.txt
/home/me/path/To/file.txt

答案 3 :(得分:0)

是的,我想我已经知道了。 “ /”字符似乎被忽略了。我想知道详细信息记录在哪里,也许隐藏在LC_ALL中。