2016-03-28 2 views
0

Мне нравится использовать опцию UNIX sort для получения уникальных строк на основе определенного поднабора столбцов, например. sort -u -k1,1 -k4,4UNIX сортировать уникально гарантированно дать первый

я широко смотрел в UNIX sort и GNU sort документации, и я не могу найти гарантию, что опция -u вернет первый экземпляр (например, утилиты uniq) после сортировки по указанным клавишам ,

Кажется, что это работает на практике (сортируйте по клавишам, затем укажите первый экземпляр каждой уникальной комбинации клавиш), но я надеялся на какую-то гарантию в документации, чтобы спокойно поставить свою паранойю.

Кто-нибудь знает о такой гарантии?

+1

Почему бы просто не использовать 'uniq', если он работает так, как вам хотелось бы/чувствовать себя уверенным, _e.g._' uniq ... | сортировать | ... '? – Castaglia

+0

Хорошая точка, но 'uniq' работает только на всех линиях. Но вы можете использовать 'sort -u' в подмножестве столбцов. – cmo

+0

А, я вижу. Возможно, что-то вроде 'cut -f 1,4 | uniq | сортировать | ... ', _i.e._, используя' cut', чтобы получить столбцы, в которых вы заинтересованы? – Castaglia

ответ

1

Я думаю, что код для такой небольшой утилиты, вероятно, единственное место, где вы найдете такую ​​гарантию. Вы также можете включить дополнительный отладочный вывод, если хотите посмотреть, как он работает.

Если вы просматриваете код для GNU sort, похоже, что тестирование уникальности происходит после завершения всей сортировки, когда оно выполняется путем сортировки содержимого временных файлов, созданных процессом сортировки.

Это происходит в while loop, который сравнивает предыдущую строку savedline с smallest, которая является следующей наименьшей входной строкой, которая будет выводиться.

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

+0

это правда. Но если это не гарантируется на странице руководства или где-то, то технически возможно, что в каком-то будущем «обновление» 'sort', код может быть изменен, и он больше не будет истинным. – cmo

+0

Тогда я думаю, что ваш ответ заключается в том, что нет гарантии, и это деталь реализации. –