排序范围Linux
各位。我对bash中的排序有一些问题。我正在使用Ubuntu 14.04。 第一个问题是:如果我有文件some.txt包含以下内容,为什么:排序范围Linux,linux,bash,sorting,ubuntu,range,Linux,Bash,Sorting,Ubuntu,Range,各位。我对bash中的排序有一些问题。我正在使用Ubuntu 14.04。 第一个问题是:如果我有文件some.txt包含以下内容,为什么: b 8 b 9 a 8 a 9 当我输入这个时: sort -n -k 2 some.txt 结果将是: a 8 b 8 a 9 b 9 这意味着文件首先排序到第二个字段,然后排序到第一个字段,但我认为它会保持稳定,即 b 8 a 8 ... ... 如果两行相等,可能是应用字典排序还是什么 第二个问题是:为什么以下方法不起作用: sort -
b 8
b 9
a 8
a 9
当我输入这个时:
sort -n -k 2 some.txt
结果将是:
a 8
b 8
a 9
b 9
这意味着文件首先排序到第二个字段,然后排序到第一个字段,但我认为它会保持稳定,即
b 8
a 8
...
...
如果两行相等,可能是应用字典排序还是什么
第二个问题是:为什么以下方法不起作用:
sort -n -k 1,2 try.txt
try.txt文件如下所示:
8 2
8 11
8 0
8 5
9 2
9 0
第三个问题实际上不是排序问题,但当我尝试这样做时,它会出现:
sort blank.txt > blank.txt
在此之后,BLACK.TXT文件是空的。为什么呢
-s
选项
最后,作为最后一种手段,当所有键比较相等时,sort会比较整行,就像没有指定除--reverse(-r)之外的任何排序选项一样。--stable(-s)选项禁用最后的比较,以便所有字段比较相等的行保持其原始相对顺序。
()
重定向将截断文件(如果存在)。之后,您将给sort
对于#2,你实际上没有解释什么不起作用。扩展示例数据时,会发生这种情况
$ cat try.txt
8 2
8 11
9 2
9 0
11 11
11 2
$ cat try.txt
8 2
8 11
9 2
9 0
11 11
11 2
我假设您想知道为什么第二列没有按数字排序。让我们回到sed手册:
“-n”“--数字排序”
“--sort=numeric” 按数字排序数字从每行开始,包括 看起来使用
-n
仅对第一列进行数字排序。经过反复试验,我发现这种组合可以对每列进行数字排序:
$ sort -k1,1n -k2,2n try.txt
8 2
8 11
9 0
9 2
11 2
11 11
我修正了你的格式。请使用编辑链接查看我做了什么。另外,请阅读和,以获取编写好问题的提示。可能算法不稳定的原因很好:我猜它会带来性能损失(不是时间复杂度,但算法变得更复杂,需要更多说明)。非常感谢glenn jackman。我认为这是一些基本的东西,但显然不是。第一次我尝试了不同的方法,但都不管用。您的方式工作得很好,但我仍然不明白这为什么不起作用sort-k 1n,2n try.txt语法很奇怪。如果有人能告诉我这是如何工作的,我会很高兴。事实上,我忘了提到这也在工作:sort-k1n-k2n try.txt,但它也很不方便。@WillemVanOnsem排序算法“不稳定”的原因不止一个。第一个是优化,我想你是在暗示。如果排序不需要保留输入数据原始顺序的任何方面,则排序可能会更快。在这种情况下,不稳定可能导致密钥等价类中出现不可预测或随机排序。第二个,似乎是gnu
sort
的情况,是确保一致的结果;“万不得已”阶段做了额外的工作来对关键等价类进行排序,否则这些类的顺序将被稳定地保留下来。