Я часто сталкиваюсь с ситуацией, когда частично упорядоченные данные должны быть отсортированы. Первый столбец уже отсортирован, позже нет. Как этот пример с двумя столбцами:
1 5
1 3
2 10
2 -1
2 3
3 11
3 -200
3 20
Желаемый результат - это результат
sort -k 1,1g -k 2,2g
который работает, но имеет проблему, что ничего не выйдет из сортировки, пока все входные данные не будут прочитаны. Когда ввод занимает несколько гигабайт текста, это может занять некоторое время, в течение которого ничего не может выполнить ни один нисходящий поток по сравнению с сортировкой в конвейере. Это также не очень эффективно с точки зрения использования памяти, так как весь набор данных должен находиться там одновременно, даже если для достижения желаемой сортировки действительно требуется только небольшая часть.
С помощью сценария было бы нетрудно разбить это на куски, а затем отсортировать каждый кусочек. Есть ли у команды sort где-то опция для уведомления, что данные в этом столбце уже упорядочены? Я не вижу это в виде 8.4, но, возможно, я просто пропустил это?
Если сортировка встречает неупорядоченное значение в столбце, о котором было сказано, что он уже упорядочен, она должна выйти. Это указывает на ошибку в восходящей обработке.