2014-01-23 4 views
2

Может кто-нибудь объяснить, что sort -k 1,1 и sort -k 1,2 делает?Как работает сортировка -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 

ответ

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 
0

Обратите внимание на --debug вариант GNU рода начиная с версии 8,6 (2010-10-15)

$ 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

Смежные вопросы