如何使用 GNU 排序明确地对正数和负数进行排序?

How to sort explicitly positive and negative numbers with GNU sort?

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

+1.4
+12.3
-1.0
-4.2

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

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

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

谢谢。

一个选项是删除 + 个字符,排序,然后再次添加它们。

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

在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 ] ...