如何使用 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
应该可以解决问题。 -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.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
应该可以解决问题。 -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 ] ...