сортировка по разным столбцам в последовательности или сортировка по нескольким столбцам сразу

В чем разница между sort -t' ' -k1,1n -k2,2n и sort -t' ' -k1,2n?

Можете привести примеры?

Я пробовал:

logan@logan-mainPC:~/my-test/learn-sort$ cat myage 
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,3
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,2 -k3,3
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,2 -k3,3n
my age 1
my age 2
my age 100
my age 200

Я думаю sort -k2,3 сортирует 'age 1', 'age 100', ... и sort -k2,2 -k3,3 сортирует 'age', 'age', ... затем '1', '100', ..... Поскольку все они рассматривают столбцы как строки, они дают одинаковый результат.

Но sort -k2,2 -k3,3n выдает другой результат, потому что он рассматривает столбец 3 как число.

Но затем:

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,3n
my age 1
my age 100
my age 2
my age 200

что странно. Выяснил, что причина в том, что столбец 2 не является числом.

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -k2,3n
sort: using ‘en_AU.UTF-8’ sorting rules
sort: key 1 is numeric and spans multiple fields
my age 1
   ^ no match for key
________
my age 100
   ^ no match for key
__________
my age 2
   ^ no match for key
________
my age 200
   ^ no match for key
__________

Спасибо.

1
задан 8 August 2021 в 11:23

1 ответ

Я могу видеть, что происходит, по флагу - debug .

sort -k2,3 действительно сортирует "возраст 1", "возраст 100", ...

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,3
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
   _____
________
my age 100
   _______
__________
my age 2
   _____
________
my age 200
   _______
__________

sort -k2,2 -k3,3 сортирует по "возрасту", ... затем «1», «100», ...

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,2 -k3,3
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
   ___
       _
________
my age 100
   ___
       ___
__________
my age 2
   ___
       _
________
my age 200
   ___
       ___
__________

Наконец,

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,2 -k3,3n
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
   ___
       _
________
my age 2
   ___
       _
________
my age 100
   ___
       ___
__________
my age 200
   ___
       ___
__________

обрабатывает третий столбец как числа.

0
ответ дан 20 August 2021 в 10:28

Другие вопросы по тегам:

Похожие вопросы: