什么时候以及为什么我需要一个 's' 标志来按列排序

When and why do i need a 's' flag for sorting by a column

我试图按第一列对文件进行排序,如果第一列具有相同的值,则不更改第二列的顺序,

$ cat test
1   4
1   3
1   2   
1   1
3   3
2   1
2   2
2   3

期望输出:

1   4
1   3
1   2   
1   1
2   1
2   2
2   3
3   3

仅当我使用 sort test -s -k1,1 时才有效。

以下全部更改第二列的顺序:

sort test
sort test -k1
sort test -k1,1
sort test -s -k1

1   1
1   2   
1   3
1   4
2   1
2   2
2   3
3   3

为什么我需要 -s-k1,1 一起使用?

来自man sort

-s, --stable stabilize sort by disabling last-resort comparison

换句话说,如果sort发现两行有相同的键,它会比较整行来排序。您禁用了与 -s 的最后一次比较,因此保留了原始顺序。

https://en.wikipedia.org/wiki/Sorting_algorithm#Stability