У меня есть файл:
$ cat file
1 c
8 a
1 b
5 f
Я думаю sort
команда в начале сравнивает первое поле всех строк и сортирует их затем для тех строк, имеют равные первые поля, и начинает сортировать снова для вторых полей как это:
$sort file
1 b
1 c
5 f
8 a
Я читал о различии между опциями k 1
и k 1,1
: с k 1
возможно, что ключ сортировки продолжается в конец строки, но с k 1,1
это должно отсортировать только первое поле, не рассматривая другие поля, но:
$sort -k 1 file
1 b
1 c
5 f
8 a
$sort -k 1,1 file
1 b
1 c
5 f
8 a
Почему имеют выводы sort
= sort k 1
= sort k 1,1
равный?
Я думаю вывод sort k 1,1 file
должен быть
1 c
1 b
5 f
8 a
Если это не корректно, скажите мне, какова моя ошибка и как я могу быть произведен как этот?
От info sort
Many options affect how ‘sort’ compares lines; if the results are
unexpected, try the ‘--debug’ option to see what happened. A pair of
lines is compared as follows: ‘sort’ compares each pair of fields, in
the order specified on the command line, according to the associated
ordering options, until a difference is found or no fields are left. If
no key fields are specified, ‘sort’ uses a default key of the entire
line. Finally, as a last resort when all keys compare equal, ‘sort’
compares entire lines as if no ordering options other than ‘--reverse’
(‘-r’) were specified. The ‘--stable’ (‘-s’) option disables this
“last-resort comparison” so that lines in which all fields compare equal
are left in their original relative order. The ‘--unique’ (‘-u’) option
also disables the last-resort comparison.
Так для достижения желаемого результата (принимающий во внимание первое поле является числовым)
$ sort -s -k1,1n file
1 c
1 b
5 f
8 a
Если Вы хотите, чтобы второй столбец был инвертирован (это не надлежащий ответ на Ваш конкретный вопрос, но возможно это - то, что Вы интересуетесь), уточняя немного от Unix StackExchange, который каждый получает:
sort -k1,1n -k2,2r file