大家。我有一些关于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文件为空。那是为什么?
答案 0 :(得分:5)
默认情况下,GNU排序显然不稳定:添加-s
选项
最后,作为最后的手段,当所有键比较相等时,sort会比较整行,就像没有指定除--reverse(-r)之外的任何排序选项一样。 --stable(-s)选项禁用此最后的比较,以便所有字段比较相等的行保留其原始相对顺序。 (https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html)
如果您不显示文字文件,则无法回答您的问题
>
重定向将截断该文件。之后,您将向sort
$ 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