Гид по технологиям

Команда sort в Linux — полное руководство

• 7 min read • Linux • Обновлено 21 Nov 2025
Команда sort в Linux — полное руководство
Команда sort в Linux — полное руководство

использование sort в Linux для сортировки строк и файлов

Что такое команда sort

Команда sort упорядочивает строки входного текстового потока или файлов и выводит результат в стандартный вывод. Она поддерживает множество опций, которые меняют критерии и поведение сортировки: числовая, обратная, по столбцам, с игнорированием регистра, по месяцам, удаление дубликатов и другие. По умолчанию sort читает файлы или stdin и печатает отсортированный набор строк без изменения исходных файлов.

Короткое определение: sort — утилита для сортировки строк с множеством флагов для управления порядком.

Важно: поведение сортировки зависит от локали (LC_COLLATE). Для стабильного «байт-ориентированного» порядка используйте LC_ALL=C sort.

Простая синтаксическая справка

Базовый синтаксис:

sort filename

Где filename — путь к текстовому файлу или несколько файлов. Если имя файла не указано, sort читает из stdin.

По умолчанию sort упорядочивает строки следующим образом:

  • Сначала сравнение выполняется согласно правилам локали.
  • Числовые строки не имеют приоритета по умолчанию (чтобы сортировать как числа, используйте -n).
  • По умолчанию регистр влияет: строки с маленькими буквами могут идти перед строками с теми же буквами в верхнем регистре, в зависимости от локали.

Пример: файл textfile.txt

просмотр текстового файла в терминале

Сортировка по умолчанию:

sort textfile.txt

Вывод:

результат сортировки по умолчанию в терминале

Создать новый файл с результатом сортировки

sort сам по себе не изменяет исходный файл. Чтобы сохранить результат, перенаправьте вывод в файл или используйте флаг -o:

sort -o sortedfile filename

Пример:

sort -o sorted.txt textfile.txt

Вывод после команды:

сохранение отсортированного вывода в новый файл

Сортировка нескольких файлов сразу

Передайте несколько имён файлов через пробел — sort объединит (merge) их содержимое и отсортирует общую последовательность:

sort textfile.txt textfile2.txt

объединённая сортировка нескольких файлов

Обратная сортировка

Флаг -r инвертирует порядок:

sort -r textfile.txt

обратная сортировка файла

Числовая сортировка

Для корректной сортировки чисел используйте -n. Это важно, потому что лексикографическая сортировка неправильно упорядочит числа (например, 100 раньше 2).

sort -n numbers.txt

сортировка числового файла

Для сортировки чисел в обратном порядке комбинируйте -r и -n:

sort -rn numbers.txt

обратная числовая сортировка

Если числа в формате «человеческих размеров» (например, 1K, 2M), используйте -h для human-numeric-suffix (в GNU sort):

sort -h sizes.txt

Игнорирование регистра

Чтобы не учитывать регистр букв при сравнении, используйте -f или –ignore-case:

sort -f textfile.txt
# или
sort --ignore-case textfile.txt

сортировка без учёта регистра

Сортировка по месяцам

Флаг -M сортирует строки, содержащие названия месяцев, в календарном порядке (Jan, Feb, … или локализованные названия месяцев в вашей локали):

sort -M textfile2.txt

сортировка по названиям месяцев

Игнорирование ведущих пробелов

Флаг -b заставляет sort пропускать начальные пробелы и табуляции при сравнении строк:

sort -b fileblanks.txt

игнорирование начальных пробелов при сортировке

Сортировка по колонке

Часто файлы имеют несколько колонок, разделённых пробелами или табуляцией. Флаг -k указывает ключ (столбец) для сравнения.

Пример: сортировка по восьмому столбцу в обратном числовом порядке:

sort -k8 -rn output.txt

сортировка по значению указанного столбца

Если разделитель колонок — не пробел, укажите его через -t:

sort -t',' -k3,3 file.csv

Использование конвейеров и других команд

sort часто применяется в пайплайнах. Пример: сортировать вывод ls по размеру файла:

ls -la | sort -k5 -rn

использование sort в пайплайне с ls

Если нужно выбрать уникальные значения после сортировки, комбинируйте sort и uniq (или используйте -u):

# предпочтительный способ: sort + uniq
sort file.txt | uniq
# или встроенный -u
sort -u file.txt

Случайная сортировка

Флаг -R выдаёт случайный порядок строк (зависит от реализации и версии sort):

sort -R textfile.txt

случайная перестановка строк

Сортировка версий пакетов

Флаг -V или –version-sort подходит для строк с версионными номерами (1.2, 1.10, 1.2.3):

sort -V version.txt
# или
sort --version-sort version.txt

сортировка версий пакетов

Проверка, отсортирован ли файл

Флаг -c проверяет, отсортирован ли файл по указанным критериям. Если файл корректно отсортирован — sort ничего не выводит и возвращает код 0. В противном случае он напечатает первую строку, нарушающую порядок.

sort -c textfile.txt

Если вы хотите проверить файл sorted.txt после создания:

sort -c sorted.txt

проверка, отсортирован ли файл

Проверка сортировки с флагами (пример для чисел в обратном порядке):

sort -c -rn numbers.txt

Пример конвейера, где мы сортируем и сохраняем, затем проверяем:

sort -o sorted.txt -rn numbers.txt
sort -c -rn sorted.txt

проверка отсортированного числового файла

Сортировка с удалением дубликатов

Флаг -u (или –unique) заставляет sort выводить только уникальные строки:

sort -u duplicate.txt

удаление повторяющихся строк при сортировке

Это полезно, когда нужно одновременно упорядочить данные и избавиться от повторов. Если важна строжайшая фильтрация уникальности с учётом только определённой колонки, комбинируйте -k и -u.

Полезные флаги и краткая шпаргалка

  • -o FILE — вывести результат в FILE.
  • -n — числовая сортировка.
  • -r — обратный порядок.
  • -f, –ignore-case — игнорировать регистр.
  • -u, –unique — выводить только уникальные строки.
  • -k POS[,POS] — ключ (столбец) для сортировки.
  • -t CHAR — символ-разделитель полей.
  • -M — сортировать по месяцам.
  • -b — игнорировать ведущие пробелы.
  • -c — проверить, отсортирован ли файл.
  • -V, –version-sort — сортировать версии.
  • -h — human-numeric (размеры с суффиксами K/M).
  • -S SIZE — ограничить объем памяти для сортировки (например, 50%).
  • –parallel=N — использовать N потоков (если поддерживается).
  • -T DIR, –temporary-directory=DIR — временная директория для промежуточных файлов.

Когда sort даёт неожиданные результаты (панель с распространёнными причинами)

  • Локаль влияет на порядок символов. Решение: использовать LC_ALL=C для байтового порядка.
  • Различные разделители столбцов. Решение: явно указать -t.
  • Числовые строки содержат не только цифры (постфикс, символы). Решение: использовать -g или предварительно извлечь числовую часть с awk.
  • Большие файлы не помещаются в память. Решение: использовать –temporary-directory, -S и –parallel или внешнее разбиение и merge.
  • Неправильная сортировка «человеческих» размеров. Решение: использовать -h.

Альтернативные подходы

  • uniq: удаляет дубликаты, но работает корректно только на уже отсортированных входных данных.
  • awk/perl/python: гибкая фильтрация и сортировка, если требуется сложная логика ключей или преобразования перед сравнением.
  • sort + join: для операций по ключу между файлами.

Пример, когда awk лучше: нестандартная нормализация поля перед сравнением (убрать скобки, привести число к float).

Практическая методика для больших файлов

  1. Если важен детерминированный порядок — выставьте LC_ALL=C.
  2. Попробуйте sort с -S и –temporary-directory, чтобы не переполнить память.
  3. Если файл слишком большой, разбейте его на части (split), отсортируйте части, затем объедините через sort –merge или просто sort с несколькими входами.
  4. Для многопроцессорных машин добавьте –parallel.

Критерии приёмки (тесты для проверки корректности сортировки)

  • Файл с числами: после sort -n результат должен быть в неубывающем порядке.
  • Файл с версиями: sort -V должен расположить 1.2 перед 1.10.
  • Повторяющиеся строки: sort -u должен вернуть только уникальные строки.
  • Проверка колонок: sort -t’,’ -k3,3 file.csv — значения в 3-й колонке должны быть упорядочены.
  • Проверка стабильности (если требуется): сравнить исходный порядок эквивалентных ключей.

Роль-базированные чек-листы

Для системного администратора

  • Использовать LC_ALL=C для детерминированной сортировки логов.
  • Для больших лог-файлов применять -S, -T и –parallel.
  • Хранить временные файлы в защищённой директории с правильными правами.

Для разработчика

  • Для сравнения семплов использовать sort -u и diff.
  • При парсинге CSV указывать -t и точные диапазоны -k.
  • Использовать sort -V для списков релизов.

Для аналитика данных

  • Проверять пустые и NULL-поля перед сортировкой.
  • Приводить данные к нормализованному виду (trim, lowercase) перед сортировкой.
  • Использовать pipe: preprocess | sort -kX | postprocess.

Краткая шпаргалка команд (кейсы использования)

  • Отсортировать и сохранить:
sort -o out.txt in.txt
  • Удалить дубликаты и сохранить:
sort -u in.txt > unique.txt
  • Сортировать по 3-й колонке CSV (числово):
sort -t',' -k3,3n data.csv
  • Сортировать файлы и вывести только первые 10 строк результата:
sort big.txt | head
  • Сортировать список файлов по размеру (ls):
ls -la | sort -k5 -rn

Модель рассуждения: как думать о sort

Ментальная модель: представьте sort как функцию сравнения, применяемую к каждой паре строк с набором правил (флаги). Вы выбираете «ключ» и «правила сравнения», а sort применяет их к каждой строке и выстраивает порядок по сравнению.

Если нужно, чтобы строки группировались по ключу, используйте -k; если важен числовой порядок — -n; если порядок должен быть устойчивым к регистру — -f.

Мерmaid: выбор флагов (диаграмма выбора)

flowchart TD
  A[Нужно отсортировать файл?] --> B{Тип данных}
  B --> |Числа| C[Используйте -n]
  B --> |Размеры с суффиксом '1K'| D[Используйте -h]
  B --> |Месяцы| E[Используйте -M]
  B --> |Версии| F[Используйте -V]
  B --> |Строки| G[Используйте -f для игнор. регистра]
  C --> H{Нужен обратный порядок?}
  H --> |Да| I[Добавьте -r]
  H --> |Нет| J[Без -r]
  G --> K{По колонке?}
  K --> |Да| L[Добавьте -k и -t]
  K --> |Нет| M[Обычная сортировка]

Советы по безопасности и приватности

  • Временные и выходные файлы могут содержать чувствительные данные. Убедитесь, что регион временных директорий использует корректные права (chmod) и находится на зашифрованном разделе при необходимости.
  • Не публикуйте логи и файлы с персональными данными без анонимизации.

Совместимость и заметки о локали

  • Поведение сортировки зависит от реализации sort (GNU coreutils vs BSD). Некоторые флаги (например, -h) доступны в GNU sort.
  • Для предсказуемого порядка используйте LC_ALL=C.

Краткая галерея крайних случаев

  • Файл с табуляцией vs пробелами: указывать -t поможет избежать ошибок.
  • Очень длинные строки: могут повлиять на память; используйте -S и –temporary-directory.
  • Мультиязычные строки: локаль определяет порядок букв с диакритикой.

просмотр файла для примера перед сортировкой

Заключение

sort — мощный, гибкий инструмент для упорядочивания текстовых данных в Linux. Понимание ключевых флагов, локали и поведения при обработке больших файлов позволяет применять его в большинстве сценариев: от простых задач по сортировке до интеграции в ETL-процессы или реструктурирования логов.

Пробуйте комбинации флагов на тестовых данных, используйте LC_ALL=C для детерминированного результата и комбинируйте sort с awk, uniq и другими инструментами для получения нужного результата.

Короткое резюме:

  • Выбирайте ключи (-k), режим сравнения (-n, -h, -V, -M) и дополнительные параметры (-r, -u, -f).
  • Для больших файлов настраивайте память и временные директории.
  • Проверяйте корректность с помощью -c и тестовых примеров.

результат работы sort на примере с дубликатами и уникальными строками

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро