我有一个文件foo
,其内容是
140,22
236,224
2,86
如果我用它排序,sort foo
我会得到相同的结果。这告诉我,
是在数字之后,或者至少是,
在 之后3
。
矛盾的是,发生了以下情况:
$echo -e "2\n,\n3" | sort
,
2
3
这告诉我那,
是在之前2
。我不明白。有人可以解释一下吗?
答案1
排序取决于您的区域设置,所以可能存在一些奇怪的解释。我在我的系统上得到了与你相同的结果。这里,逗号是被忽略通过语言环境。因此,如果我们将276
和添加296
到您的列表中:
$ sort /tmp/tosort
140,22
236,224
276
2,86
296
这也解释了第二个命令的结果。逗号未排序第一的,却被忽视了。因此,它本质上是对空字符串进行排序。如果您在测试中添加一个空字符串,您也会在开头看到它。
$ echo -e "2\n,\n3\n" | sort
,
2
3
(我不清楚为什么空字符串在逗号之前。我怀疑当有平局时使用逗号。)
使用“标准”POSIX 语言环境,您将获得更可预测的结果。
$ export LC_ALL=C
$ sort foo
140,22
2,86
236,224