Введение
В ходе этой практической работы вы изучите возможности универсальной команды sort в Linux — мощного инструмента для организации и упорядочивания текстовых данных. Представьте себя в роли администратора школы: вам предстоит использовать различные параметры команды sort для эффективного управления информацией об учениках и её анализа. Этот практический опыт поможет вам понять, как манипулировать данными в реальных сценариях с помощью командной строки Linux.
Базовая сортировка имен учеников
Начнем с сортировки списка имен учеников по алфавиту. Это типичная задача при составлении классных журналов или организации личных дел.
Для начала просмотрим содержимое нашего списка учеников:
cat ~/project/students.txt
Вы увидите список имен в произвольном порядке, примерно такой:
David Lee
Alice Johnson
Charlie Brown
Bob Smith
Eve Wilson
Теперь воспользуемся командой sort, чтобы расположить эти имена в алфавитном порядке:
sort ~/project/students.txt
Эта команда выведет отсортированный список на экран. Результат должен выглядеть следующим образом:
Alice Johnson
Bob Smith
Charlie Brown
David Lee
Eve Wilson
По умолчанию команда sort выполняет алфавитную сортировку строк. Она сравнивает строки посимвольно, начиная с начала каждой строки. Именно поэтому "Alice" идет перед "Bob" и так далее.
Если вы не видите изменений в файле, не волнуйтесь! Команда сработала, но она просто вывела результат в терминал. Если вы хотите сохранить отсортированный список в новый файл, используйте оператор перенаправления вывода >, например: sort ~/project/students.txt > ~/project/sorted_students.txt
Сортировка учеников по возрасту
Далее мы отсортируем учеников по их возрасту. Это может быть полезно при распределении детей по возрастным группам или секциям.
Сначала изучим наши данные:
cat ~/project/student_ages.txt
Вы увидите список учеников с указанием возраста в таком формате:
David Lee:21
Alice Johnson:18
Charlie Brown:19
Bob Smith:20
Eve Wilson:18
Чтобы отсортировать этот список по возрасту, мы используем параметр -n, который указывает команде sort обрабатывать значения как числа, а не как строки:
sort -n -t: -k2 ~/project/student_ages.txt
Разберем эту команду по частям:
-n: этот параметр включает числовую сортировку.-t:: указывает, что поля разделены двоеточием.-k2: предписывает использовать второе поле (возраст) в качестве ключа сортировки.
В результате на экране появится список, отсортированный от самых младших к самым старшим:
Alice Johnson:18
Eve Wilson:18
Charlie Brown:19
Bob Smith:20
David Lee:21
Без параметра -n команда sort воспринимала бы возраст как текст, что могло бы привести к неверному порядку (например, 18, 19, 2, 20, 21, так как "2" идет после "1"). Параметр -n гарантирует правильную математическую последовательность.
Обратная сортировка оценок
Теперь давайте отсортируем оценки учеников в порядке убывания. Это часто требуется для составления рейтингов или выявления лучших учеников.
Сначала просмотрим текущий список:
cat ~/project/student_grades.txt
Вы должны увидеть нечто подобное:
David Lee:87
Alice Johnson:92
Charlie Brown:95
Bob Smith:88
Eve Wilson:91
Чтобы отсортировать оценки от высшей к низшей, мы используем параметр -r для обратного порядка вместе с -n для числовой сортировки:
sort -nr -t: -k2 ~/project/student_grades.txt
Вот за что отвечает каждая часть команды:
-n: выполняет числовую сортировку.-r: инвертирует порядок (по убыванию вместо возрастания).-t:: указывает, что разделителем полей является двоеточие.-k2: использует второе поле (оценку) как ключ для сортировки.
Команда выведет оценки учеников от самых высоких к самым низким:
Charlie Brown:95
Alice Johnson:92
Eve Wilson:91
Bob Smith:88
David Lee:87
Параметр -r особенно полезен, когда нужно сначала увидеть наибольшие значения, что часто встречается в реальных задачах: от рейтингов до приоритизации задач.
Сортировка записей по нескольким полям
На этом этапе мы отсортируем более сложную структуру данных, включающую имя, возраст и оценку. Это стандартная ситуация при работе с полноценными базами данных учащихся.
Посмотрим на данные:
cat ~/project/student_records.txt
Каждая строка содержит имя, возраст и оценку, разделенные двоеточиями:
David Lee:21:87
Alice Johnson:18:92
Charlie Brown:19:95
Bob Smith:20:88
Eve Wilson:18:91
Чтобы отсортировать этот файл сначала по возрасту (второе поле), а затем по оценке (третье поле), если возраст совпадает, используйте следующую команду:
sort -t: -k2n -k3nr ~/project/student_records.txt
Разбор параметров:
-t:указывает, что поля разделены двоеточием.-k2nсортирует по второму полю (возраст) в числовом порядке.-k3nrзатем сортирует по третьему полю (оценка) в числовом порядке и в обратном направлении.
Это выведет записи, сгруппированные по возрасту (по возрастанию), а внутри каждой возрастной группы — по оценкам (от лучших к худшим):
Alice Johnson:18:92
Eve Wilson:18:91
Charlie Brown:19:95
Bob Smith:20:88
David Lee:21:87
Такая многоуровневая сортировка крайне полезна, когда нужно организовать данные по нескольким критериям одновременно.
Удаление дубликатов
Иногда записи об учениках могут содержать дубликаты из-за ошибок ввода или повторных отправок данных. Давайте научимся их удалять.
Сначала изучим файл с возможными повторами:
cat ~/project/student_clubs.txt
Вы можете увидеть что-то подобное:
Alice Johnson:Chess Club
Bob Smith:Debate Team
Charlie Brown:Chess Club
David Lee:Science Club
Eve Wilson:Debate Team
Alice Johnson:Chess Club
Bob Smith:Science Club
Чтобы отсортировать этот список и убрать повторяющиеся строки, используйте параметр -u (unique):
sort -u ~/project/student_clubs.txt
Команда выведет отсортированный список уникальных записей о членстве в клубах:
Alice Johnson:Chess Club
Bob Smith:Debate Team
Bob Smith:Science Club
Charlie Brown:Chess Club
David Lee:Science Club
Eve Wilson:Debate Team
Параметр -u заставляет sort выводить только первую из группы одинаковых строк. Другими словами, он удаляет дубликаты после сортировки. Это незаменимо при создании списков уникальных элементов или очистке данных от избыточности.
Обратите внимание, что "Bob Smith" встречается дважды, так как он состоит в двух разных клубах — эти строки не считаются дубликатами, так как содержимое строк различается.
Резюме
В ходе этой лабораторной работы вы научились использовать команду sort для организации различных типов данных. Вы изучили несколько полезных параметров:
- Базовая алфавитная сортировка.
- Числовая сортировка с помощью
-n. - Обратная сортировка с помощью
-r. - Сортировка по нескольким полям с помощью
-k. - Использование пользовательских разделителей полей с помощью
-t. - Удаление дубликатов с помощью
-u.
Другие полезные параметры sort включают:
-f: игнорировать регистр (не различать прописные и строчные буквы).-b: игнорировать начальные пробелы.-c: проверить, отсортирован ли входной файл.-o: записать результат в файл вместо вывода на экран.
Эти навыки будут бесценны при управлении и анализе данных в самых разных профессиональных контекстах, далеко выходящих за рамки образовательной сферы.



