2017-10-19 90 views
0

下面显示的文件按不同顺序包含相同的一组行。事实上,他们都已经通过sort <filename>排序(你可以尝试自己排序);然而,结果显示第4和第5行相互切换。这怎么会发生?为什么终端sort命令按不同的顺序排序文件?具有相同文本集合的文件的不同终端“排序”结果

文件1

w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_㎡ w_㎡ 1 
w_ℓ w_ℓ 1 

文件2:

w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_ℓ w_ℓ 1 
w_㎡ w_㎡ 1 
+1

这类问题**真的**需要指定您正在使用的语言环境,特别是关于字符类型和整理顺序。 –

回答

0

非常有趣!它必须是与语言环境设置相关的内容。我可以得到它的C语言环境工作:

$ LC_ALL=C sort file1 
w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_ℓ w_ℓ 1 
w_㎡ w_㎡ 1 

$ LC_ALL=C sort file2 
w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_ℓ w_ℓ 1 
w_㎡ w_㎡ 1 

起初,我以为这可能是由于字符代码的长度,所以也许字符组成的两个字节,其中第一个字节是相同。让我们研究一下的是:

$ printf 'w_ℓ w_ℓ 1' |hd; printf 'w_㎡ w_㎡ 1' |hd 
00000000 77 5f e2 84 93 20 77 5f e2 84 93 20 31   |w_... w_... 1| 
0000000d 
00000000 77 5f e3 8e a1 20 77 5f e3 8e a1 20 31   |w_... w_... 1| 
0000000d 

e2 84e3 8e,所以这不是什么怎么回事。

这可能是因为您的区域设置指示出于某种原因跳过这些字符。对于en_US.UTF-8,至少在GNU coreutils 8.28中有sort

相关问题