我正在尝试按文本文件的 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 排序器应该注意