Команда sort читает полные строки, упорядочивает их по выбранным правилам сравнения и записывает результат в stdout. Она не изменяет входной файл, если явно не выбрана операция вывода.
Text-Fu · Урок 12
sort
Научитесь упорядочивать строки текста лексически, численно или по значениям выбранных полей с помощью sort.
Сортировка полных строк
Рассмотрим 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, не позволяя перенаправлению оболочки заранее усечь файл?
Чтобы попрактиковаться в упорядочивании и анализе построчных данных, выполните лабораторные работы:
- Команда sort в Linux: сортировка текста — попрактикуйтесь сортировать строки текстовых файлов разными способами, включая прямой и обратный порядок.
- Подсчёт слов и сортировка — примените сортировку вместе с подсчётом слов для анализа текста, поиска частых закономерностей и упорядочивания данных.
Урок завершён
Вы завершили sort
Теперь вы можете выбирать правила сравнения и назначение отсортированного текста.
При необходимости воспроизводимости сортируйте полные строки с явной локалью.
Обращайте результат параметром
-r.Сравнивайте числовые значения параметром
-n.Выбирайте ограниченный ключ поля с помощью
-tи-k.Удаляйте повторы или сохраняйте вывод, не усекая входной файл.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт