Сортировка текста в Linux

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

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

Введение

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") subgraph Lab Skills linux/echo -.-> lab-271385{{"Сортировка текста в Linux"}} linux/cat -.-> lab-271385{{"Сортировка текста в Linux"}} linux/cd -.-> lab-271385{{"Сортировка текста в Linux"}} linux/sort -.-> lab-271385{{"Сортировка текста в Linux"}} end

Базовая сортировка текста с использованием команды sort

В Linux команда sort используется для упорядочивания строк текстовых файлов в определенном порядке. По умолчанию она сортирует файлы по алфавиту, но предоставляет множество параметров для настройки поведения сортировки.

Начнем с создания простого текстового файла, который мы будем использовать для практики сортировки. Вы создадите файл, содержащий список языков программирования.

  1. Сначала перейдите в каталог проекта:
cd ~/project
  1. Создайте новый файл с именем languages.txt с помощью следующей команды:
echo -e "Python\nJava\nRuby\nGo\nJavaScript\nPHP\nRust\nC++\nSwift\nKotlin" > languages.txt

Эта команда создает файл с 10 именами языков программирования, каждое на отдельной строке.

  1. Просмотрите содержимое только что созданного файла:
cat languages.txt

Вы должны увидеть следующий вывод:

Python
Java
Ruby
Go
JavaScript
PHP
Rust
C++
Swift
Kotlin
  1. Теперь отсортируем этот файл по алфавиту с использованием команды sort:
sort languages.txt

Вывод должен выглядеть следующим образом:

C++
Go
Java
JavaScript
Kotlin
PHP
Python
Ruby
Rust
Swift

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

  1. Если вы хотите сохранить отсортированный вывод в новый файл, вы можете использовать перенаправление вывода:
sort languages.txt > sorted_languages.txt
  1. Проверьте содержимое нового файла:
cat sorted_languages.txt

Вы должны увидеть тот же отсортированный вывод, как и ранее.

Команда sort также предоставляет параметр -r для обратной сортировки. Попробуем его:

sort -r languages.txt

Вывод будет в обратном алфавитном порядке:

Swift
Rust
Ruby
Python
PHP
Kotlin
JavaScript
Java
Go
C++

Теперь вы узнали базовое использование команды sort для сортировки по алфавиту.

Числовая сортировка и разделители полей

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

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

Создадим файл с числовыми значениями, чтобы изучить числовую сортировку:

  1. Создайте файл с именем numbers.txt:
cd ~/project
echo -e "10\n5\n100\n20\n1\n50" > numbers.txt
  1. Просмотрите содержимое файла:
cat numbers.txt

Вы должны увидеть:

10
5
100
20
1
50
  1. Если вы используете базовую команду sort для этого файла:
sort numbers.txt

Вывод будет следующим:

1
10
100
20
5
50

Обратите внимание, что это не правильный числовой порядок, потому что по умолчанию sort обрабатывает каждую строку как текст. Строка "100" идет перед "20" в лексикографическом (словарном) порядке.

  1. Чтобы отсортировать по числам, используйте параметр -n:
sort -n numbers.txt

Теперь вы увидите правильный числовой порядок:

1
5
10
20
50
100

Сортировка файлов с несколькими полями

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

  1. Создайте CSV (Comma-Separated Values - значения, разделенные запятыми) файл с некоторыми примеровыми данными:
cd ~/project
echo -e "Name,Age,City\nAlice,28,New York\nBob,35,Los Angeles\nCarol,22,Chicago\nDavid,31,Boston\nEve,26,Seattle" > people.csv
  1. Просмотрите содержимое файла:
cat people.csv

Вы должны увидеть:

Name,Age,City
Alice,28,New York
Bob,35,Los Angeles
Carol,22,Chicago
David,31,Boston
Eve,26,Seattle
  1. Чтобы отсортировать этот файл по второму полю (Возраст), используйте параметр -t для указания разделителя полей (в данном случае запятая) и параметр -k для указания номера поля:
sort -t, -k2,2n people.csv

Параметр -t, устанавливает разделитель полей в виде запятой, а -k2,2n сообщает sort использовать второе поле для сортировки и рассматривать его как числовое значение.

Вывод должен быть следующим:

Name,Age,City
Carol,22,Chicago
Eve,26,Seattle
Alice,28,New York
David,31,Boston
Bob,35,Los Angeles
  1. Вы также можете отсортировать по третьему полю (Город) по алфавиту:
sort -t, -k3,3 people.csv

Вывод будет следующим:

Name,Age,City
David,31,Boston
Carol,22,Chicago
Bob,35,Los Angeles
Alice,28,New York
Eve,26,Seattle

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

Продвинутые техники сортировки

На этом этапе мы рассмотрим некоторые продвинутые функции команды sort, которые помогут вам справиться с более сложными требованиями к сортировке.

Удаление дубликатов

Иногда ваши данные могут содержать повторяющиеся строки, которые вы хотите удалить. Команда sort предоставляет параметр -u для вывода только уникальных строк.

  1. Создайте файл с некоторыми дублирующимися записями:
cd ~/project
echo -e "apple\nbanana\napple\ncherry\nbanana\ndates" > fruits.txt
  1. Просмотрите содержимое файла:
cat fruits.txt

Вы должны увидеть:

apple
banana
apple
cherry
banana
dates
  1. Используйте параметр -u для сортировки и удаления дубликатов:
sort -u fruits.txt

Вывод будет следующим:

apple
banana
cherry
dates

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

По умолчанию команда sort учитывает регистр, то есть "Apple" и "apple" считаются разными. Если вы хотите игнорировать регистр при сортировке, используйте параметр -f.

  1. Создайте файл с записями в разных регистрах:
cd ~/project
echo -e "apple\nBanana\nApple\ncherry\nBanana\nDates" > mixed_case.txt
  1. Просмотрите содержимое файла:
cat mixed_case.txt

Вы должны увидеть:

apple
Banana
Apple
cherry
Banana
Dates
  1. Отсортируйте файл с учетом регистра (по умолчанию):
sort mixed_case.txt

Вывод будет следующим:

Apple
Banana
Banana
Dates
apple
cherry

Обратите внимание, что заглавные буквы идут перед строчными в порядке сортировки ASCII.

  1. Теперь отсортируйте файл, игнорируя регистр:
sort -f mixed_case.txt

Вывод будет следующим:

apple
Apple
Banana
Banana
cherry
Dates

Обратите внимание, как "apple" и "Apple" теперь рассматриваются как одинаковые для целей сортировки.

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

Команда sort также может сортировать по названиям месяцев с использованием параметра -M:

  1. Создайте файл с названиями месяцев:
cd ~/project
echo -e "December\nFebruary\nJanuary\nMarch\nNovember\nApril" > months.txt
  1. Отсортируйте месяцы в календарном порядке:
sort -M months.txt

Вывод будет следующим:

January
February
March
April
November
December

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

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

sort -c sorted_languages.txt

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

Попробуйте это с несортированным файлом:

sort -c languages.txt

Вы должны увидеть сообщение об ошибке, подобное следующему:

sort: languages.txt:2: disorder: Java

Эти продвинутые техники сортировки дают вам больше контроля над тем, как ваши данные организованы и обрабатываются.

Резюме

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

Основные концепции, рассмотренные в этом практическом занятии:

  1. Базовая алфавитная сортировка с использованием команды sort
  2. Сохранение отсортированного вывода в новый файл с использованием перенаправления
  3. Сортировка в обратном порядке с помощью параметра -r
  4. Числовая сортировка с помощью параметра -n
  5. Сортировка файлов с несколькими полями с использованием параметров -t и -k
  6. Удаление дублирующихся записей с помощью параметра -u
  7. Сортировка без учета регистра с использованием параметра -f
  8. Сортировка по месяцам с помощью параметра -M
  9. Проверка, отсортирован ли файл, с помощью параметра -c

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

  • Анализ лог-файлов
  • Обработка CSV-данных
  • Организация конфигурационных файлов
  • Подготовка данных для дальнейшего анализа или обработки

Освоив эти техники сортировки, вы добавили ценный инструмент в свой набор инструментов командной строки Linux, который поможет вам более эффективно работать с текстовыми данными.