我试图在MacOS Mavericks和Linux Centos 6.5上获得相同的GNU排序输出。我在MacOS上安装了最新的'brew'gsort。在对完全相同的文件进行排序时,我会从两个平台上的排序中获得不同的输出结果:具体来说,“#”字符的处理方式。以下是排序文件的第一行,您可以非常清楚地看到差异:
MacOS brew gsort:
SENT_ID1###de peu ||| and gustav stresemann ||| 1.0<br/>
SENT_ID1###en compagnie d' aristide briand ||| only just missed achieving ||| 1.0<br/>
SENT_ID1###et de gustav stresemann ||| their aim ||| 1.0<br/>
SENT_ID1###il a manqué cet objectif ||| he and aristide briand ||| 1.0<br/>
SENT_ID10###dans le même esprit ||| still ||| 1.0<br/>
SENT_ID10###de comblement ||| with the same aim of making good ||| 1.0<br/>
SENT_ID10###de nos institutions européennes ||| of institutional democracy ||| 1.0<br/>
等
CentOS上带有'sort'的相同文件:
SENT_ID10000###car il constitue l' ||| as it constitutes ||| 1.0<br/>
SENT_ID10000###de ce débat ||| of this debate ||| 1.0<br/>
SENT_ID10000###nous pensons ||| we think ||| 1.0<br/>
SENT_ID10000###que ce paragraphe aurait mérité ||| that this section would have merited ||| 1.0<br/>
SENT_ID10000###un des défis majeurs ||| one of the major challenges ||| 1.0<br/>
SENT_ID10000###un plus ample développement ||| further development ||| 1.0<br/>
SENT_ID10001###à aucune règle si ce n' est celle du marché ||| only to market rules ||| 1.0<br/>
SENT_ID10001###ces systèmes complémentaires ||| these supplementary systems ||| 1.0<br/>
SENT_ID10001###en augmentation ||| which are increasing ||| 1.0<br/>
SENT_ID10001###ne sont soumis ||| are subject ||| 1.0<br/>
等
在CentOS下的零字符中,零字符优先于'hash'字符,您可以看到排序顺序完全不同。 gsort MacOS排序顺序是我期望的。任何人都可以告诉我为什么CentOS排序顺序错误以及如何纠正这个问题?
答案 0 :(得分:1)
即使两个系统上的LC_COLLATE=C
显然相同,我在macOS和Linux上也看到了不同的行为。
如果使用LC_COLLATE=POSIX
或fr_FR.UTF-8
,则在两个操作系统之间至少应该保持一致。
macOS,$ (export LC_COLLATE=fr_FR.UTF-8; echo -e 'a\nA\na.1\nA.1\na1\nA1\na#1\nA#1' | gsort)
A
A#1
A.1
A1
a
a#1
a.1
a1
:
#
注意大写字母在小写字母之前排序,.
在.
之前排序,而1
在fr_FR.utf8
之前排序。
Linux(RH6),$ (export LC_COLLATE=fr_FR.utf8; echo -e 'a\nA\na.1\nA.1\na1\nA1\na#1\nA#1' | sort)
a
A
a1
a.1
a#1
A1
A.1
A#1
:
1
注意大写字母在小写字母后面排序,.
在.
之前排序,#
在POSIX
之前
现在有$ (export LC_COLLATE=POSIX; echo -e 'a\nA\na.1\nA.1\na1\nA1\na#1\nA#1' | gsort)
A
A#1
A.1
A1
a
a#1
a.1
a1
:
macOS:
$ (export LC_COLLATE=POSIX; echo -e 'a\nA\na.1\nA.1\na1\nA1\na#1\nA#1' | sort)
A
A#1
A.1
A1
a
a#1
a.1
a1
Linux:
e.set_n(3);
d.set_c('b');
std::cout << c.get_c() << d.get_n() << std::endl;
有趣的是,macOS默认排序规则似乎更接近POSIX标准。我想知道其背后的历史。