为什么不在每台机器上进行**排序**排序?

时间:2008-08-26 19:15:47

标签: bash unix sorting ksh

使用相同输入的相同排序命令会在不同的计算机上生成不同的结果。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:20)

OS X上的man-page说:

  

*******警告*******环境指定的区域设置会影响排序顺序。设置LC_ALL = C得到   使用本机字节值的传统排序顺序。

可能会解释事情。

如果您的某些系统没有区域设置支持,它们将默认使用该区域设置(C),因此您不必在这些区域设置上设置它。如果您有一些支持区域设置并且想要相同的行为,请在这些系统上设置LC_ALL=C。这将是让我知道的系统以同样的方式实现的方式。

如果您没有任何无语言环境的系统,只需确保它们共享语言环境就足够了。

有关更多规范信息,请参阅单个UNIX®规范,版本2 localeenvironment variablessetlocale()的说明以及sort(1)实用程序的说明。< / p>

答案 1 :(得分:3)

这可能是区域设置差异的结果:

$ echo 'CO2_
CO_' | env LC_ALL=C sort
CO2_
CO_


$ echo 'CO2_
CO_' | env LC_ALL=en_US sort
CO_
CO2_

将LC_ALL环境变量设置为相同的值应该可以解决问题。

答案 2 :(得分:3)

这可能是由locale environment variables的不同设置造成的。 sort将使用这些设置来确定如何比较字符串。通过在调用sort之前按照您想要的方式设置这些环境变量,您应该能够强制它以一种特定的方式运行。

答案 3 :(得分:2)

如果您想了解sort以上的内容,请阅读specification of sort中的Single Unix Specification v3。它声明

  

比较[...]应使用当前区域设置的整理顺序执行。

IOW,sort排序的方式取决于运行脚本的环境的语言环境(语言)设置。