按 unicode 值对行进行排序

按 unicode 值对行进行排序

我正在尝试按文本文件的 Unicode 值对文本文件进行排序。据我所知,这意味着首先是数字,然后是字母,然后是中日韩表意文字。然而,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]
[一人華飯スペシャル]
[七瀬屋]

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

首先,为什么它的表现如此出人意料?第二,我该如何解决这个问题?

添加:// 我在 Raspberry Pi 上使用 Raspbian (B)

答案1

您使用什么系统?

LC_ALL=C sort < your-file.txt

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]
[チ→ム♂ツナギ]
[一人華飯スペシャル]
[七瀬屋]

在我的系统上(从 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

sort在 GNU coreutils 7.4、EGLIBC 2.11.1-0ubuntu7.12 的旧系统上也是如此

答案2

问题已经解决了。显然LC_ALL=C还不够。我需要写export LC_ALL=C才能被认可sort。这是我的错,但对于未来的 unicode 排序器应该注意

相关内容