【发布时间】: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
谢谢。
【问题讨论】:
给定一个包含以下数字的文件:
+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
谢谢。
【问题讨论】:
在 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 ] ...
【讨论】:
一种选择是去除+ 字符,排序,然后再次添加它们。
$ 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
【讨论】: