【发布时间】:2018-07-24 16:41:24
【问题描述】:
我生成了一个带有伪随机数的文本文件,如下所示:
-853340442 1130519212 -2070936922
-707168664 -2076185735 -2135012102
166464098 1928545126 5768715
1060168276 -684694617 395859713
-680897578 -2095893176 1457930442
299309402 192205833 1878010157
-678911642 2062673581 -1801057195
795693402 -631504846 2117889796
448959250 547707556 -1115929024
168558507 7468411 1600190097
-746131117 1557335455 73377787
-1144524558 2143073647 -2044347857
1862106004 -193937480 1596949168
-1193502513 -920620244 -365340967
-677065994 500654963 1031304603
现在我尝试使用 linux sort 命令来整理它:
sort prng >prngsorted
结果不是我所期望的:
1060168276 -684694617 395859713
-1144524558 2143073647 -2044347857
-1193502513 -920620244 -365340967
166464098 1928545126 5768715
168558507 7468411 1600190097
1862106004 -193937480 1596949168
299309402 192205833 1878010157
448959250 547707556 -1115929024
-677065994 500654963 1031304603
-678911642 2062673581 -1801057195
-680897578 -2095893176 1457930442
-707168664 -2076185735 -2135012102
-746131117 1557335455 73377787
795693402 -631504846 2117889796
-853340442 1130519212 -2070936922
显然,sort 尝试解析字符串并提取数字进行排序。而且它似乎忽略了减号。
是否可以强制sort 稍微笨一点,只按字典顺序比较行?结果应该是这样的:
-1144524558 2143073647 -2044347857
-1193502513 -920620244 -365340967
-677065994 500654963 1031304603
-678911642 2062673581 -1801057195
-680897578 -2095893176 1457930442
-707168664 -2076185735 -2135012102
-746131117 1557335455 73377787
-853340442 1130519212 -2070936922
1060168276 -684694617 395859713
166464098 1928545126 5768715
168558507 7468411 1600190097
1862106004 -193937480 1596949168
299309402 192205833 1878010157
448959250 547707556 -1115929024
795693402 -631504846 2117889796
注意:我尝试了-d 选项,但没有帮助
注意 2:也许我应该使用另一个实用程序而不是 sort?
【问题讨论】:
-
看man,你有6种排序:general-numeric -g,human-numeric -h,month -M,numeric -n,random -R,version -V。尝试每一个,看看理想的输出是什么。
-
这也可以在 serverfault 上找到:unix sort treats dash characters as invisible
-
顺便说一句,如果你使用
sort -n,那么你会得到数字排序。默认行为是字典式,但(在您的语言环境中)忽略-符号。