按 unicode 值对行进行排序

Mec*_*MK1 8 sort unicode

我正在尝试按其 Unicode 值对文本文件进行逐行排序。据我所知,这意味着首先是数字,然后是字母,然后是 CJK 表意文字。然而,sort(with LC_ALL=C) 在这个任务上失败了。这是我的清单的摘录:

[#??????????]
[???????]
[??]
...
[?????????????]
[?????????????]
[10th Avenue Cafe]
[2nd Flush]
...
[Alstroemeria Records & Cradle]
[ALTERNATIVE]
[???????? - Altneuland]
[Amateras Records]
[???????Ammy's]
[anagram]
[Analyze]
...
[Z.S.G TRAXXX]
[? music]
[?iselied]
[?????????]
[???]
Run Code Online (Sandbox Code Playgroud)

似乎sort忽略(至少有时)它无法读取的字符,因为Altneuland确实会在Alternative和之间Amateras Records。使用有人建议msort(有选项,但它也失败了-u c-u d-u n分别)。

首先,为什么它表现得如此出乎意料?其次,我该如何解决这个问题?

添加:// 我在树莓派上使用 Raspbian (B)

Sté*_*las 6

你用的是什么系统?

LC_ALL=C sort < your-file.txt
Run Code Online (Sandbox Code Playgroud)

your-file.txt您以 utf-8 编码发布的文本在哪里,排序为:

[#??????????]
[10th Avenue Cafe]
[2nd Flush]
[ALTERNATIVE]
[Alstroemeria Records & Cradle]
[Amateras Records]
[Analyze]
[Z.S.G TRAXXX]
[anagram]
[? music]
[?iselied]
[??]
[?????????????]
[???????? - Altneuland]
[?????????????]
[???????Ammy's]
[???????]
[?????????]
[???]
Run Code Online (Sandbox Code Playgroud)

在我的系统上(从 GNU coreutils 8.13、Debian EGLIBC 2.13-38 排序)。当通过管道传递cut -c2 | tr -d \\n | recode ..dump给:

UCS2   Mne   Description

0023   Nb    number sign
0031   1     digit one
0032   2     digit two
0041   A     latin capital letter a
0041   A     latin capital letter a
0041   A     latin capital letter a
0041   A     latin capital letter a
005A   Z     latin capital letter z
0061   a     latin small letter a
03B1   a*    greek small letter alpha
042F   JA    cyrillic capital letter ya
305E   zo    hiragana letter zo
307B   ho    hiragana letter ho
30A2   A6    katakana letter a
30B5   Sa    katakana letter sa
30BB   Se    katakana letter se
30C1   Ti    katakana letter ti
4E00
4E03
Run Code Online (Sandbox Code Playgroud)

sort来自 GNU coreutils 7.4、EGLIBC 2.11.1-0ubuntu7.12的旧系统相同