如何用GNU排序明确排序正数和负数?

时间:2016-07-17 21:04:38

标签: shell sorting 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

感谢。

2 个答案:

答案 0 :(得分:3)

在bash中:

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

应该做的伎俩。 -e echo解释转义序列。 -g sort根据一般数值进行比较。

示例输出

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

答案 1 :(得分:0)

一个选项是剥离+字符,排序,然后重新添加。

$ 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