首页 > 解决方案 > 排序键似乎没有正确计算 utf8 字符

问题描述

我想tmp.txt按位置 3 和 4 对以下(最小示例)文件的行进行排序(我的原始文件有不同数量的空格,所以我不能使用它)。

o Aa
á Ab
è Ba
f Bb

文件的编码是utf8。

prompt$ file -i tmp.txt
tmp.txt: text/plain; charset=utf-8

我的语言环境也是 utf8

prompt$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

不过,以下命令的输出不是我所期望的:

prompt$ cat tmp.txt | sort -R | sort --debug --key 1.3,1.4
sort: using ‘en_US.UTF-8’ sorting rules
á Ab
 __
____
o Aa
  __
____
è Ba
 __
____
f Bb
  __
____

我已经打开--debug以可视化sort正在做什么。它将特殊字符计为两个,因此键位置错误,如下划线所示。谁能告诉我,如何说服sort将特殊字符仅计为一个?

prompt$ sort --version
sort --version
sort (GNU coreutils) 8.26

最好的,约瑟夫。

标签: sorting

解决方案


推荐阅读