排序范围Linux

时间:2014-08-25 20:09:48

标签: 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 -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 

在此之后,blank.txt文件为空。那是为什么?

1 个答案:

答案 0 :(得分:5)

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

      

    最后,作为最后的手段,当所有键比较相等时,sort会比较整行,就像没有指定除--reverse(-r)之外的任何排序选项一样。 --stable(-s)选项禁用此最后的比较,以便所有字段比较相等的行保留其原始相对顺序。   (https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

  2. 如果您不显示文字文件,则无法回答您的问题

  3. 在将控制权交给程序之前,shell 会处理重定向。如果文件存在,>重定向将截断该文件。之后,您将向sort
  4. 提供一个空文件
    对于#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”
      “--numeric排序”
      '--sort = numeric'

         
        

    按数字排序。 数字从每行开始,由...组成

      

    看起来使用-n只能按数字排序第一列。经过一些反复试验后,我发现这个组合以数字方式对每个列进行排序:

    $ sort -k1,1n -k2,2n try.txt 
    8 2
    8 11
    9 0
    9 2
    11 2
    11 11