【问题标题】:UNIX sort with exponential values?UNIX用指数值排序?
【发布时间】:2011-09-14 13:36:48
【问题描述】:

我有一个包含 7 个数据字段的 csv 文件。我想以相反的数字顺序对第 7 个字段进行排序(首先是最小值)。第 7 个数据字段如下所示:

0.498469643137
1
6.98112003175e-10
9.11278069581e-06

我尝试过像这样使用 UNIX 排序工具:

$ sort -t"," -n -k -r 7 <my_file>

我遇到的问题是 sort 无法识别指数形式。例如,sort 认为6.98112003175e-10 大于1。如何使用 sort 对 csv 列进行排序,但识别科学记数法?提前感谢您的帮助。

【问题讨论】:

    标签: unix sorting csv exponent


    【解决方案1】:

    使用 '-g' 选项排序应该可以解决问题。 -g 选项表示“使用通用数值”进行排序

    【讨论】:

    • 谢谢,我阅读了手册页,但没有看到关于 -g 标志的任何信息。这正是我想要的。
    【解决方案2】:

    请注意,您的语言环境可能会采用另一个分隔符: 例如,在俄语本地化中,“,”字符分隔数字的一部分,而不是“.”。在这种情况下,您应该考虑 LANG 变量。

    在我的情况下,LANG 设置为 ru_RU.KOI8-R,所以 sort -g 给了我错误的结果。

    【讨论】:

    【解决方案3】:

    所以 - 只是给那些不知道如何使用它的人举个例子:你使用“-g”代替“-n”。 l = 1,0.3,6.01e-10

    sort -t$',' -n example.txt

    0.3 1 6.01e-10

    sort -t$',' -g example.txt

    6.01e-10 0.3 1

    【讨论】:

    • 您能详细说明一下吗?
    • 怎么回事? -g 用于“使用通用数值”。请阅读上面关于为什么使用 -g 的帖子。如果您还有问题,我一定会尽力解答!
    【解决方案4】:
    1. 你应该使用-g
    2. 不要使用-n

    正确的命令是sort -g -k7,7 input.txt

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2016-02-25
      • 2020-09-02
      • 1970-01-01
      相关资源
      最近更新 更多