排序范围Linux

排序范围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 -

各位。我对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 -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文件是空的。为什么呢

  • 显然,默认情况下GNU排序不稳定:添加
    -s
    选项

    最后,作为最后一种手段,当所有键比较相等时,sort会比较整行,就像没有指定除--reverse(-r)之外的任何排序选项一样。--stable(-s)选项禁用最后的比较,以便所有字段比较相等的行保持其原始相对顺序。 ()

  • 如果不显示文本文件,则无法回答您的问题

  • 重定向在将控制权移交给程序之前由shell处理。
    重定向将截断文件(如果存在)。之后,您将给
    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
    的情况,是确保一致的结果;“万不得已”阶段做了额外的工作来对关键等价类进行排序,否则这些类的顺序将被稳定地保留下来。