【问题标题】:How to sort explicitly positive and negative numbers with GNU sort?如何使用 GNU 排序明确地对正数和负数进行排序?
【发布时间】:2016-07-17 21:04:38
【问题描述】:

给定一个包含以下数字的文件:

+1.4
+12.3
-1.0
-4.2

如何使用 GNU sort 按数字顺序对其进行排序?

使用-n-h 似乎不起作用:+ 字符未得到正确处理?

$ echo "+1.4\n+12.3\n-4.2\n-1.0" | sort -h
-4.2
-1.0
+12.3
+1.4

谢谢。

【问题讨论】:

    标签: shell sorting gnu-sort


    【解决方案1】:

    在 bash 中:

    echo -e "+1.4\n+12.3\n-4.2\n-1.0" | sort -g
    

    应该可以解决问题。 -eecho 解释转义序列。 -gsort 按一般数值比较。

    样本输出

    $ echo -e "+1.4\n+12.3\n-4.2\n-1.0" | sort -g
    -4.2
    -1.0
    +1.4
    +12.3
    

    旁注:在某些 shell 中,echo -e 是默认行为。检查[ this ] ...

    【讨论】:

      【解决方案2】:

      一种选择是去除+ 字符,排序,然后再次添加它们。

      $ echo "+1.4\n+12.3\n-1.0\n-4.2" \
          | sed 's/^\+//' \
          | sort -h \n
          | sed -E 's/^([^-])/\+\1/
      -4.2
      -1.0
      +1.4
      +12.3
      

      【讨论】:

      • 如果有办法做到这一点而不诉诸文本操作,我会接受这个答案。
      猜你喜欢
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多