gpt4 book ai didi

sorting - unix sort -n -t","给出意外结果

转载 作者:行者123 更新时间:2023-12-04 17:49:57 25 4
gpt4 key购买 nike

unix 数字排序给出了奇怪的结果,即使我指定了分隔符。

$ cat example.csv  # here's a small example
58,1.49270399401
59,0.000192136419373
59,0.00182092924724
59,1.49270399401
60,0.00182092924724
60,1.49270399401
12,13.080339685
12,14.1531049905
12,26.7613447051
12,50.4592437035

$ cat example.csv | sort -n --field-separator=,
58,1.49270399401
59,0.000192136419373
59,0.00182092924724
59,1.49270399401
60,0.00182092924724
60,1.49270399401
12,13.080339685
12,14.1531049905
12,26.7613447051
12,50.4592437035

对于此示例,无论您是否指定分隔符, sort 都会给出相同的结果。我知道如果我设置 LC_ALL=C然后 sort 再次开始给出预期的行为。但我不明白为什么默认环境设置(如下所示)会发生这种情况。
$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

我已经阅读了许多其他问题(例如 hereherehere )如何避免这种行为,但是,这种行为仍然非常奇怪和不可预测,并让我心痛了一周。有人可以解释为什么在 Mac OS X (10.8.5) 上使用默认环境设置排序会这样吗?换句话说:排序在做什么(将局部变量设置为 en_US.UTF-8)以获得该结果?

我正在使用
 sort 5.93                        November 2005

$ type sort
sort is /usr/bin/sort

更新

我已经在 gnu-coreutils 列表中讨论过这个问题,现在明白为什么使用英语 unicode 默认语言环境设置排序给出了它所做的输出。因为在英文 unicode 中,逗号字符“,”被认为是一个数字(以便允许逗号作为千位(或例如百位)分隔符),并且当它解释一行时,排序默认为“贪婪”,它读取示例数字大约
581.491...
590.000...
590.001...
591.492...
600.001...
601.492...
1213.08...
1214.15...
1226.76...
1250.45...

虽然这不是我的意图,而且 chepner 是正确的,以获得我想要的实际结果,但我需要指定我希望排序只在第一个字段上键入。 sort 默认将行的更多部分解释为键,而不仅仅是将第一个字段解释为键。

这种排序行为已在 gnu-coreutil 的 FAQ 中讨论过。 ,并在 the POSIX description of sort 中进一步指定.

因此,正如埃里克·布莱克 (Eric Blake) 上的 gnu-coreutil's list put it ,如果字段分隔符也是数字(逗号是),那么“如果没有 -k 来停止,[字段分隔符] 既用作分隔符又用作数字字符 - 您正在对跨越多个字段的数字进行排序.”

最佳答案

我不确定这是否完全正确,但很接近。
sort -n -t,将尝试按给定的键进行数字排序。在这种情况下,键是一个由整数和浮点数组成的元组。这样的元组不能按数字排序。

如果您明确指定要排序的单个键

sort -k1,1n -k2,2n -t,

它应该工作。现在你明确告诉 sort首先对第一个字段(数字)排序,然后对第二个字段(也是数字)排序。

我怀疑 -n仅当输入的每一行都包含单个数值时,才可用作全局选项。否则,您需要使用 -n选项与 -k 一起使用选项以准确指定哪些字段是数字。

关于sorting - unix sort -n -t","给出意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com