Перейти к содержанию

19. Сортировка, объединение и фильтрация sort, uniq, diff, comm

Эффективная работа с текстовыми данными в Linux требует умения сортировать, фильтровать и сравнивать содержимое файлов. Команды sortuniqdiff и comm обеспечивают мощные инструменты для выполнения этих задач.

В этой лекции мы подробно разберем:

  • Сортировку данных с помощью sort.
  • Удаление дубликатов с использованием uniq.
  • Сравнение файлов с помощью diff.
  • Анализ общих и различающихся строк в файлах с помощью comm.

Команда sort

Описание:

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

Синтаксис:

sort [опции] [файл]

Основные опции:

  • n — сортировка по числовым значениям.
  • r — обратный порядок сортировки.
  • k — сортировка по определенному столбцу.
  • u — исключение повторяющихся строк (аналог uniq).
  • o — запись результата в файл.

Примеры использования:

  1. Сортировка строк в файле:

    bash sort файл.txt

  2. Числовая сортировка:

    bash sort -n числа.txt

  3. Обратная сортировка:

    bash sort -r файл.txt

  4. Сортировка по второму столбцу:

    bash sort -k 2 файл.txt

  5. Сохранение результата в файл:

    bash sort файл.txt -o отсортированный.txt


Команда uniq

Описание:

uniq удаляет повторяющиеся строки из отсортированного файла или потока данных. Для работы с ней файл должен быть предварительно отсортирован.

Синтаксис:

uniq [опции] [входной_файл] [выходной_файл]

Основные опции:

  • c — подсчитать количество повторов.
  • d — вывести только повторяющиеся строки.
  • u — вывести только уникальные строки.

Примеры использования:

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

    bash sort файл.txt | uniq

  2. Подсчет числа повторов каждой строки:

    bash sort файл.txt | uniq -c

  3. Вывод только дубликатов:

    bash sort файл.txt | uniq -d


Команда diff

Описание:

diff сравнивает два файла построчно и показывает их различия. Полезна для анализа изменений в текстовых данных.

Синтаксис:

diff [опции] файл1 файл2

Основные опции:

  • y — вывести файлы в виде двух колонок.
  • -suppress-common-lines — скрыть одинаковые строки в режиме двух колонок.
  • q — только сообщить о наличии различий.
  • c — контекстный режим, показывающий несколько строк вокруг различий.

Примеры использования:

  1. Сравнение двух файлов:

    bash diff файл1.txt файл2.txt

  2. Вывод различий в виде колонок:

    bash diff -y файл1.txt файл2.txt

  3. Показывать только различия:

    bash diff -y --suppress-common-lines файл1.txt файл2.txt

Пример результата:

< строка в первом файле
> строка во втором файле

Команда comm

Описание:

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

Синтаксис:

comm [опции] файл1 файл2

Основные опции:

  • 1 — исключить строки, уникальные для первого файла.
  • 2 — исключить строки, уникальные для второго файла.
  • 3 — исключить строки, общие для обоих файлов.

Примеры использования:

  1. Сравнение двух отсортированных файлов:

    bash comm файл1.txt файл2.txt

  2. Вывод только общих строк:

    bash comm -12 файл1.txt файл2.txt

  3. Вывод строк, уникальных для первого файла:

    bash comm -23 файл1.txt файл2.txt

Пример результата:

строка только из файла1
строка только из файла2
    общая строка

Практические задания

  1. Сортировка строк:

    Создайте текстовый файл с именами и отсортируйте его в обратном порядке.

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

    Удалите повторяющиеся строки из файла с помощью sort и uniq.

  3. Анализ различий:

    Сравните два текстовых файла с помощью diff и найдите, какие строки были добавлены или удалены.

  4. Общие строки:

    Найдите строки, которые присутствуют в обоих файлах, используя comm.


Сравнение команд

Функция sort uniq diff comm
Сортировка строк Да Нет Нет Нет
Удаление дубликатов Нет Да Нет Нет
Сравнение файлов Нет Нет Да Да
Анализ уникальных строк Нет Нет Нет Да

Заключение

Команды sortuniqdiff и comm — мощные инструменты для работы с текстовыми данными. Они широко применяются в администрировании, программировании и анализе данных. Освоение этих команд позволит эффективно сортировать, фильтровать и сравнивать файлы, а также автоматизировать задачи с текстовыми данными.