有人可以解释sort -k 1,1
和sort -k 1,2
的作用吗?
$ echo -e "9 3 5\n8 2 6\n7 4 1\n"
9 3 5
8 2 6
7 4 1
$ echo -e "9 3 5\n8 2 6\n7 4 1\n" | sort -k 2 -t " " -i
8 2 6
9 3 5
7 4 1
$ echo -e "9 3 5\n8 2 6\n7 4 1\n" | sort -k 1,1 -t " " -i
7 4 1
8 2 6
9 3 5
$ echo -e "9 3 5\n8 2 6\n7 4 1\n" | sort -k 1,2 -t " " -i
7 4 1
8 2 6
9 3 5
答案 0 :(得分:5)
引自man sort
:
-k, --key=POS1[,POS2]
start a key at POS1 (origin 1), end it at POS2 (default end of
line). See POS syntax below
所以:
-k 2
将从键2开始,直到该行结束。
-k 1,1
将从键1开始,以键1结束。同样适用于-k 1,2
。
您的示例输入没有显示差异,但如果您稍微修改它,那么它可能会更清楚:
$ echo -e "9 3 5\n9 2 6\n7 4 1" | sort -k1,1 -t' '
7 4 1
9 2 6
9 3 5
$ echo -e "9 3 5\n9 2 6\n7 4 1" | sort -k1,2 -t' '
7 4 1
9 2 6
9 3 5
$ echo -e "9 3 5\n9 2 6\n7 4 1" | sort -k1,1 -t' ' -s
7 4 1
9 3 5
9 2 6
特别注意案例1和3.即使要对键1应用排序,案例1中的输出也会受到影响。使用-s
选项以稳定排序:
-s, --stable
stabilize sort by disabling last-resort comparison
答案 1 :(得分:0)
请注意自版本8.6(2010-10-15)
以来可用的GNU排序的--debug选项$ echo -e "9 3 5\n8 2 6\n7 4 1" | sort --debug -k 2 -t " " -i
sort: using `en_US.utf8' sorting rules
8 2 6
___
_____
9 3 5
___
_____
7 4 1
___
_____
$ echo -e "9 3 5\n8 2 6\n7 4 1" | sort --debug -k 1,1 -t " " -i
sort: using `en_US.utf8' sorting rules
7 4 1
_
_____
8 2 6
_
_____
9 3 5
_
_____
$ echo -e "9 3 5\n8 2 6\n7 4 1" | sort --debug -k 1,2 -t " " -i
sort: using `en_US.utf8' sorting rules
7 4 1
___
_____
8 2 6
___
_____
9 3 5
___
_____
注意每行中的最后一个 _ 显示整行使用的第二个比较是最后的手段,可以使用-s选项来抑制