Команда sort в Linux — руководство, флаги и примеры
Команда sort упорядочивает строки текстовых файлов по разным правилам: лексикографически, численно, по столбцам, по месяцам или случайно. Используйте -o для записи в файл, -k для сортировки по столбцу, -n для числовой сортировки, -r для обратного порядка и -u для удаления дубликатов. В статье — примеры, советы по локали, проверке сортировки и краткие рабочие чек-листы.
Важно: sort не изменяет исходный файл, если вы явно не укажете -o с именем выходного файла.

Что такое команда sort?
Команда sort упорядочивает строки в текстовом файле по выбранным критериям. Это стандартная утилита в Unix-подобных системах. Она может сортировать по алфавиту, по числам, по столбцам, по названиям месяцев, игнорировать регистр, удалять дубликаты и выполнять сортировку в случайном порядке.
Определение термина: локаль — набор правил для сравнения символов и сортировки (влияет на порядок букв и регистр).
Краткая структура руководства
- Основной синтаксис и поведение по умолчанию
- Часто используемые флаги с примерами
- Продвинутые приёмы: сортировка по столбцам, пайплайны, версии
- Когда sort не подходит и альтернативы
- Чек-листы для ролей и тесты приёмки
- Шпаргалка с командами и безопасные практики
Базовый синтаксис
sort filenameгде filename — абсолютный или относительный путь к текстовому файлу.
По умолчанию sort упорядочит строки по следующим правилам:
- Строки, начинающиеся с цифр, имеют приоритет.
- Затем строки сортируются по алфавиту.
- Строки, начинающиеся с прописной буквы, идут после строк с той же строчной буквой.
Пример файла textfile.txt, который мы будем использовать в иллюстрациях.
Выполнение:
sort textfile.txtВывод:
Создание нового выходного файла
sort по умолчанию отправляет результат в стандартный вывод. Чтобы записать результат в файл, используйте флаг -o:
sort -o sortedfile filenameПример:
sort -o sorted.txt textfile.txtВывод:
Важно: при указании имени выходного файла через -o можно перезаписать исходный файл (sort -o file file) — это поддерживается корректно.
Сортировка нескольких файлов
Передайте несколько файлов через пробел — sort объединит их и отсортирует общий поток строк:
sort textfile.txt textfile2.txtВывод:
Обратный порядок
Флаг -r меняет порядок на обратный (реверс):
sort -r textfile.txtВывод:
Числовая сортировка
Чтобы сортировать числа по их значению, используйте -n:
sort -n numbers.txtДля сортировки по убыванию комбинируйте -n и -r:
sort -rn numbers.txtВыводы:
Совет: если числа содержат префиксы/суффиксы (например, 10KB, 2MB), предварительно нормализуйте формат или используйте awk/perl для извлечения чисел.
Игнорирование регистра
По умолчанию регистр учитывается (строчные перед заглавными). Чтобы игнорировать регистр, используйте -f или –ignore-case:
sort -f textfile.txt
sort --ignore-case textfile.txtВывод:
Сортировка по названиям месяцев
Флаг -M сортирует строки по порядку месяцев (Jan, Feb, …). Удобно для списков с месяцами на английском.
sort -M textfile2.txtВывод:
Примечание: -M ориентируется на аббревиатуры месяцев в локали; для других языков локаль должна соответствовать формату.
Игнорирование ведущих пробелов
Флаг -b пропускает начальные пробелы и табуляции при сравнении строк:
sort -b fileblanks.txtВывод:
Сортировка по столбцу
Флаг -k указывает ключ (столбец) для сортировки. Нумерация столбцов начинается с 1.
Пример: сортировать файл output.txt по восьмому столбцу численно в обратном порядке:
sort -k8 -rn output.txtВывод:
Совет: используйте -t для задания разделителя полей, например -t”,” для CSV.
Применение sort в пайплайнах
sort часто используют вместе с другими командами. Пример: отсортировать вывод ls по размеру файла:
ls -la | sort -k5 -rnВывод:
Случайная сортировка
Флаг -R случайным образом перемешивает строки:
sort -R textfile.txtВывод:
Примечание: для воспроизводимости используйте shuf с параметром –random-source или LANG/CSPRNG, sort -R не предоставляет опции задавать семя.
Сортировка версий
Для корректной сортировки версий используйте -V или –version-sort:
sort -V version.txt
sort --version-sort version.txtВывод:
Это полезно для строк вида 1.2.10 и 1.2.3 — sort -V поймёт числовые компоненты.
Проверка, отсортирован ли файл
Флаг -c проверяет, отсортирован ли файл согласно заданным опциям. Если файл уже отсортирован, sort молчит и возвращает код 0.
sort -c textfile.txtЕсли файл не отсортирован, sort выведет первую строку, нарушающую порядок.
Пример с числовой обратной проверкой:
sort -c -rn numbers.txtВыход (если не отсортирован): sort сообщит об обнаруженной ошибке. После сортировки и проверки:
sort -o sorted.txt -rn numbers.txt
sort -c -rn sorted.txtВывод:
Удаление дубликатов при сортировке
Флаг -u выводит только уникальные строки (аналогично sort | uniq, но быстрее при больших данных, поскольку сорт уже выполняется):
sort -u duplicate.txtВывод:
Если нужно сохранить порядок первой встречи с каждой строкой (stable unique), используйте awk/awk-подход или объединяйте сортировку с методиками, сохраняющими порядок.
Когда sort не подходит — примеры и альтернативы
- Нужен стабильный порядок без предварительной сортировки по всему набору (оставьте исходный порядок) — используйте awk/perl с хеш-таблицей для удаления дубликатов.
- Работаете с очень большими файлами и не хотите переписывать весь файл — рассмотрите потоковую фильтрацию и внешнюю сортировку GNU sort (он умеет использовать временные файлы и ограничивать память через –buffer-size).
- Требуется случайная выборка без повторов — используйте shuf.
- Нужна семантическая сортировка (например, даты в произвольном формате) — предварительно нормализуйте даты с помощью awk/dateutils.
Альтернативы:
- uniq — удаляет подряд идущие дубликаты (часто в связке sort | uniq)
- awk/perl/python — гибкая обработка и выделение ключей
- datamash — агрегация и сортировка столбцов
- shuf — случайная перестановка
Практическая мини-методика для надёжной сортировки файлов
- Определите ключ сортировки и разделитель полей (если есть таблица).
- Проверьте локаль: echo $LC_ALL $LANG. При необходимости установите LC_ALL=C для байтовой сортировки или ru_RU.UTF-8 для локализованной.
- Выполните тестовую сортировку и сравните первые/последние строки.
- Запишите результат в новый файл через -o или перенаправление, не перезаписывайте исходник, пока не проверите.
- Выполните sort -c на итоговом файле для проверки.
Чек-листы по ролям
Администратор:
- Убедиться в корректной локали перед массовой сортировкой.
- Использовать –buffer-size для управления памятью при больших файлах.
- Логировать команды и результаты в CI/CD скриптах.
Разработчик:
- Использовать -k и -t для точного выбора столбца.
- Тестировать на краевых случаях: пустые строки, пробелы, ведущие нули.
- Писать тесты приёмки для сортировок в pipeline.
Дата-аналитик:
- Нормализовать числовые и временные поля перед сортировкой.
- Использовать sort -V для версий и –key для сложных ключей.
- Проверять стабильность сортировки при связке с uniq.
Тесты приёмки и кейсы
Критерии приёмки для команды, сортирующей CSV по 3-му столбцу численно:
- Входной файл содержит строки с разделителем “,”.
- Команда: sort -t”,” -k3,3n input.csv -o output.csv
- Проверки:
- output.csv отсортирован по третьему столбцу в порядке возрастания (sort -c -t”,” -k3,3n output.csv возвращает 0).
- Количество строк не уменьшилось (wc -l input.csv == wc -l output.csv).
- Нет дополнительных символов конца строки PEM.
Кейсы для ручного тестирования:
- Числа со знаком и ведущими нулями.
- Пустые поля в ключевом столбце.
- Поля с пробелами и кавычками.
Советы по локали и стабильности
- LC_ALL=C ускорит сортировку и даст предсказуемый байтовый порядок (полезно для скриптов).
- Локализованная сортировка (ru_RU.UTF-8) изменит порядок букв и может поместить буквы с диакритикой в другое место.
- GNU sort не гарантирует стабильность при равных ключах, если не используется специальный подход; комбинируйте ключи, чтобы задать дополнительный критерий сорто́вки.
Шпаргалка: основные флаги
- -o FILE — записать в FILE
- -r — обратный порядок
- -n — числовая сортировка
- -f — игнорировать регистр
- -M — сортировка по месяцам
- -b — игнорировать ведущие пробелы
- -k POS — сортировка по ключу (столбцу)
- -t CHAR — разделитель полей
- -R — случайная сортировка
- -V — сортировка версий
- -u — уникальные строки
- -c — проверить, отсортирован ли файл
Примеры:
sort -t"," -k2,2 -n data.csv # по 2 столбцу как числовому
sort -u names.txt # уникальные строки
ls -la | sort -k5 -rn # файлы по размеру, убывание
sort -V packages.txt # по семантическим версиям
LC_ALL=C sort file.txt # байтовая, детерминированная сортировкаМинимизация рисков и безопасность
- Не модифицируйте исходные данные без резервной копии.
- Для чувствительных данных проверьте права доступа на выходные файлы.
- Сортировка больших файлов может создать временные файлы — контролируйте доступное свободное место.
Короткий глоссарий
- Ключ — поле или столбец, по которому производится сравнение.
- Локаль — набор правил сравнения символов и форматирования данных.
- Стабильная сортировка — сохраняет исходный порядок равных элементов.
Примеры распространённых ошибок и как их избежать
- Ошибка: данные с запятыми внутри полей (CSV) ломают -t”,”). Решение: предварительно экранируйте или используйте специализированные парсеры CSV.
- Ошибка: неожиданный порядок символов из‑за локали. Решение: явно задайте LC_ALL=C или нужную локаль.
- Ошибка: думают, что -u сохраняет порядок первой встречи. Решение: -u удаляет дубликаты после сортировки; для сохранения первого вхождения используйте awk.
Заключение
Команда sort — простой и мощный инструмент для упорядочивания строк в текстовых файлах. Она покрывает большинство сценариев: от простой алфавитной сортировки до версионной и числовой сортировок. Для сложных случаев комбинируйте sort с awk, uniq и другими утилитами в пайплайнах.
Короткий чек: определите ключи, проверьте локаль, используйте -o для записи, проверяйте результат через -c.
Дополнительные ресурсы: man sort, info coreutils sort.
Похожие материалы
Исправить «Удаленное устройство не принимает подключение»
Закрепить ползунок громкости в Windows 11
Mindfulness и Reflect на Apple Watch
Curtail — сжатие изображений в Linux
Passkey для WhatsApp на Android — как настроить