2

我需要帮助理解 GNU 排序的默认算法。我假设它进行了字典排序,但是我发现了一些与此不对应的行为,例如以下字符串:

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

并使用 sort 对它们进行排序echo 'stuff' | sort

这是我得到的结果:

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

我不知道为什么出现在两者alex0之间alexaalex.}alex.a

谁可以给我解释一下这个?

4

4 回答 4

5

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

于 2013-05-13T00:59:38.327 回答
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
于 2013-05-13T01:59:23.370 回答
0

尝试在这个文件上“排序 InFile.txt”,然后将第一个单词 Start 更改为 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
于 2019-04-15T00:38:35.813 回答
0

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

于 2019-04-15T19:11:24.483 回答