Команда sort в Linux: сортировка текста

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы познакомитесь с универсальной командой sort в Linux, мощным инструментом для организации и упорядочивания текстовых данных. В качестве школьного администратора вы будете использовать различные параметры команды sort для эффективного управления и анализа информации о студентах. Этот практический опыт поможет вам понять, как манипулировать данными в реальных сценариях с использованием инструментов командной строки Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/TextProcessingGroup -.-> linux/sort("Text Sorting") subgraph Lab Skills linux/sort -.-> lab-219196{{"Команда sort в Linux: сортировка текста"}} end

Базовая сортировка имен студентов

Начнем с сортировки списка имен студентов в алфавитном порядке. Это распространенная задача при составлении списков учащихся в классе или организации студенческих записей.

Сначала посмотрим на содержимое нашего списка студентов:

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: Эта опция указывает команде sort выполнить числовую сортировку.
  • -t:: Это задает, что поля разделяются двоеточиями.
  • -k2: Это сообщает команде sort использовать второе поле (возраст) в качестве ключа сортировки.

В результате будет отображен список студентов, отсортированный от самого младшего к самому старшему:

Alice Johnson:18
Eve Wilson:18
Charlie Brown:19
Bob Smith:20
David Lee:21

Без опции -n команда sort бы рассматривала возрасты как строки, что привело бы к неправильному порядку (например, 18, 19, 20, 21, 3). Опция -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:

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: Записать вывод в файл вместо стандартного вывода

Эти навыки будут неоценимы при управлении и анализе данных в различных профессиональных сферах, а не только в образовательных учреждениях.