排序-k 1,2如何工作?

San*_*ing 2 linux sorting bash

有人可以解释什么sort -k 1,1sort -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
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 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
Run Code Online (Sandbox Code Playgroud)

所以:

-k 2
Run Code Online (Sandbox Code Playgroud)

将从键2开始,直到该行结束.

-k 1,1
Run Code Online (Sandbox Code Playgroud)

将从键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
Run Code Online (Sandbox Code Playgroud)

特别注意案例1和3.即使要对键1应用排序,情况1中的输出也会受到影响.使用该-s选项以稳定排序:

   -s, --stable
          stabilize sort by disabling last-resort comparison
Run Code Online (Sandbox Code Playgroud)