Почему выходные данные `sort`, `sort k 1`, `sort k 1,1` равны?
У меня есть файл:
$ 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
Если это не правильно, скажите, пожалуйста, в чем моя ошибка и как я могу получить такой результат?
2 ответа
От 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