有人能解释一下sort -k 1,1
和sort -k 1,2
是做什么的吗?
$ echo -e "9 3 5n8 2 6n7 4 1n"
9 3 5
8 2 6
7 4 1
$ echo -e "9 3 5n8 2 6n7 4 1n" | sort -k 2 -t " " -i
8 2 6
9 3 5
7 4 1
$ echo -e "9 3 5n8 2 6n7 4 1n" | sort -k 1,1 -t " " -i
7 4 1
8 2 6
9 3 5
$ echo -e "9 3 5n8 2 6n7 4 1n" | sort -k 1,2 -t " " -i
7 4 1
8 2 6
9 3 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 5n9 2 6n7 4 1" | sort -k1,1 -t' '
7 4 1
9 2 6
9 3 5
$ echo -e "9 3 5n9 2 6n7 4 1" | sort -k1,2 -t' '
7 4 1
9 2 6
9 3 5
$ echo -e "9 3 5n9 2 6n7 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
请注意 --debug 选项 GNU 排序自版本 8.6 (2010-10-15) 起可用
$ echo -e "9 3 5n8 2 6n7 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 5n8 2 6n7 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 5n8 2 6n7 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 选项禁止显示