我有一个德语语言环境,需要用逗号作为千位分隔符对美国格式的数字进行排序。似乎我没有正确覆盖语言环境?
sort --version
sort (GNU coreutils) 8.30
例子:
echo "-4.00\n40.00\n4,000.00"|LC_ALL=en_US.utf8 sort -h
-4.00
4,000.00
40.00
我实际上不希望它改变4,000
最大的顺序。
locale
LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME=de_DE.utf8
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
en_US.utf8
一种可能的解释是您的系统上没有该语言环境。您可以使用
locale -a
获取可用语言环境列表,以获取locale -a | grep en_US
美国英语语言环境列表。如果安装了该语言环境,
LC_ALL=en_US.utf8 locale -k LC_NUMERIC
将输出如下内容:并
LC_ALL=en_US.utf8 locale thousands_sep
会输出,
.否则,您可能会收到有关区域设置不可用的错误消息。
如果在 Debian 上,您可以使用 (as ) 选择要启用的语言环境
root
:请不要启用所有可能的语言环境;启用某些语言环境,例如使用 BIG5、BIG5HKSCS 或 GB18030 字符集的语言环境,会在您的系统上引入一些漏洞(这些字符集的字符编码包含反引号和反斜杠的编码,导致各种错误,其中一些很容易变成漏洞)。某些语言环境具有异常的排序顺序或大小写转换规则,这些规则也会使某些软件出错。
请注意,
C
和POSIX
是 POSIX 保证在 POSIX 系统上找到的唯一语言环境(它们应该是相同的)。它要求 thethousand_sep
是该语言环境中的空字符串,但这意味着它在您的情况下没有用。至少在 GNU 系统上,虽然您不能保证
en_US.UTF-8
启用了语言环境(或任何其他语言环境),但通常语言环境的源代码与localedef
编译它的命令一起可用,因此您应该能够编译它以普通用户身份在临时目录中设置语言环境。例如,您可以将us-sort
脚本定义为:这将在不可用时在临时目录中编译该语言环境并
sort
在其中运行。尽管编译语言环境是一项昂贵的操作,但这会很慢。嗯,这对我来说效果很好。我在 CentOS7 上。