В чем разница между «sort -k1 file.txt» и «sort -k1,1 file.txt»? - PullRequest
1 голос
/ 03 апреля 2012

, если файл содержит несколько столбцов, разделенных запятой, например:

aaa,1,4,4,5,7
bbb,1,4,9,1,2

Есть ли разница между «sort -t, -k1 file.txt» и «sort -t, -k1,1 file.txt»? хотя с приведенным выше примером, нет никакой разницы, но в некоторых случаях моего проекта, это действительно имеет различие, но различие отражается в случае, когда я использую отсортированный файл для присоединения, и команда присоединения выдает исключение, что «объединение: файл 2 не в отсортированном порядке» (в то время я использую «сортировать - t, -k1 file.txt '). Позже я использую 'sort -t, -k1,1 file.txt', и тогда команда соединения работает хорошо. Кто-нибудь может сказать мне, почему?

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

sort -k1 означает сортировку, начиная с ключа 1 до конца строки. sort -k1,1 означает сортировку от ключа 1 до ключа 1 (т.е. только первый ключ). На моей машине, эти два имеют значение, если я задаю стабильную сортировку с -s:

~ $ cat test.txt
aaa,1,4,4,5,7
aaa,1,3,9,1,2

~ $ sort -t, -k1 -s test.txt
aaa,1,3,9,1,2
aaa,1,4,4,5,7

~ $ sort -t, -k1,1 -s test.txt
aaa,1,4,4,5,7
aaa,1,3,9,1,2
2 голосов
/ 03 апреля 2012

Второе число - это то, где заканчивается ключ сортировки , , по умолчанию - до конца строки. С справочной страницы:

-k, --key=POS1[,POS2]:
start a key at POS1 (origin 1), end it at POS2 (default end of line)

Так что, да, есть разница. Это не относится к вашим данным, поскольку ключ сортировки 1,1 не имеет дубликатов.

Но если указать ключ сортировки 1,1, две строки:

abc,plugh
abc,xyzzy

можно сортировать в или порядке. С 1 (что означает 1,end-of-line) они будут отсортированы в указанном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...