sort
100%

Text-Fu · Урок 12

sort

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

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

Сортировка полных строк

Рассмотрим animals.txt:

dog
cow
cat
elephant
bird

Отсортируем строки по возрастанию:

$ sort animals.txt
bird
cat
cow
dog
elephant

Порядок текста определяется текущей локалью, которая может влиять на регистр, диакритические знаки и пунктуацию. Если сценарию нужна воспроизводимая побайтовая сортировка, используйте постоянную локаль, например LC_ALL=C:

$ LC_ALL=C sort animals.txt

Что делает sort animals.txt без параметров ключа и числового сравнения?

Обратный порядок

Добавьте -r, чтобы обратить результат сравнения:

$ sort -r animals.txt
elephant
dog
cow
cat
bird

Какая команда сортирует animals.txt в обратном порядке?

Сравнение чисел

Лексический порядок сравнивает символы, поэтому 10 обычно предшествует 2. Для обычного числового сравнения используйте -n:

$ printf '10\n2\n30\n' | sort -n
2
10
30

При необходимости объединяйте параметры. sort -nr scores.txt сравнивает значения численно и ставит большие первыми.

Какая команда сортирует числовые строки scores.txt от большего к меньшему?

Сортировка по полю

Используйте -k START[,END], чтобы выбрать ключ. По умолчанию поля разделяются последовательностями пробельных символов. Для записей с двоеточиями используйте -t ':':

$ printf 'alice:30\nbob:8\ncarol:20\n' | sort -t ':' -k 2,2n
bob:8
carol:20
alice:30

Здесь -t ':' выбирает разделитель, -k 2,2 ограничивает ключ полем 2, а присоединённая n задаёт числовое сравнение этого ключа. Без конечного ,2 ключ, начинающийся с поля 2, обычно продолжается до конца строки.

Какая команда сортирует users.txt численно только по второму полю, разделённому двоеточием?

Удаление повторов и сохранение вывода

Используйте -u, чтобы вывести одну строку для каждого равного ключа сравнения:

$ sort -u names.txt

Команда одновременно сортирует и удаляет повторы согласно выбранным правилам сравнения. Если нужно лишь удалить соседние повторы из уже отсортированных данных, это делает рассматриваемая далее команда uniq.

Для записи результата в другой файл подходит обычное перенаправление:

$ sort names.txt > names-sorted.txt

Не выполняйте sort names.txt > names.txt: оболочка усечёт входной файл до того, как sort его прочитает. Если намеренно нужен тот же путь, GNU sort -o names.txt names.txt безопасно управляет собственным выводом:

$ sort -o names.txt names.txt

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

Какая команда в GNU/Linux просит sort безопасно записать результат обратно в names.txt, не позволяя перенаправлению оболочки заранее усечь файл?

Чтобы попрактиковаться в упорядочивании и анализе построчных данных, выполните лабораторные работы:

  1. Команда sort в Linux: сортировка текста — попрактикуйтесь сортировать строки текстовых файлов разными способами, включая прямой и обратный порядок.
  2. Подсчёт слов и сортировка — примените сортировку вместе с подсчётом слов для анализа текста, поиска частых закономерностей и упорядочивания данных.

Урок завершён

Вы завершили sort

Теперь вы можете выбирать правила сравнения и назначение отсортированного текста.

  • При необходимости воспроизводимости сортируйте полные строки с явной локалью.

  • Обращайте результат параметром -r.

  • Сравнивайте числовые значения параметром -n.

  • Выбирайте ограниченный ключ поля с помощью -t и -k.

  • Удаляйте повторы или сохраняйте вывод, не усекая входной файл.

Сохраните прогресс

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

Создать бесплатный аккаунт
Следующий Урок
Назад к Text-Fu