Sort

按 unicode 值對行進行排序

  • March 14, 2013

我正在嘗試按其 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]
[一人華飯スペシャル]
[七瀬屋]

似乎sort忽略(至少有時)它無法讀取的字元,因為Altneuland確實會在Alternativeand之間Amateras Records。有人建議使用msort,但也失敗了(分別使用選項-u c-u d-u n)。

首先,為什麼它表現得如此出乎意料?其次,我該如何解決這個問題?

Add:// 我在樹莓派上使用 Raspbian (B)

你用的是什麼系統?

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的舊系統上相同

引用自:https://unix.stackexchange.com/questions/67841