Цепочка нескольких команд
Часть раздела Основы путешествия по Terminal на Coddy — урок 45 из 82.
Вы не ограничены соединением только двух команд. Конвейеры могут объединять в цепочку столько команд, сколько вам нужно, при этом каждая из них обрабатывает вывод предыдущей команды.
Просто добавьте больше символов |, чтобы расширить конвейер:
cat data.txt | sort | head -5Это считывает файл, сортирует все строки по алфавиту, а затем показывает только первые 5 результатов. Данные передаются слева направо через каждую команду последовательно.
Вот практический пример, который находит уникальные отсортированные записи:
cat names.txt | sort | uniqСодержимое файла сначала сортируется (что группирует дубликаты вместе), затем uniq удаляет идущие подряд повторяющиеся строки. Порядок здесь имеет значение — uniq удаляет только соседние дубликаты, поэтому сортировка должна идти первой.
Вы можете добавить еще больше этапов. Чтобы подсчитать количество уникальных имен:
cat names.txt | sort | uniq | wc -lКаждый конвейер добавляет еще один шаг преобразования. При создании длинных конвейеров думайте о том, что каждой команде требуется на вход и что она выдает на выход. Формат вывода одной команды должен подходить в качестве входных данных для следующей.
Задание
ЛегкоФайл visitors.txt содержит список имен посетителей с дубликатами. Используйте конвейер из трех команд, чтобы подсчитать количество уникальных посетителей.
Запустите одну команду, которая:
- Использует
catдля чтенияvisitors.txt - Передает данные по конвейеру в
sortдля упорядочивания имен по алфавиту - Передает данные по конвейеру в
uniqдля удаления дубликатов - Передает данные по конвейеру в
wc -lдля подсчета количества уникальных имен
Подсказка: Соедините все четыре команды вместе, используя несколько символов
|. Помните, чтоuniqудаляет только соседние дубликаты, поэтому сортировка должна предшествовать этой команде.
Шпаргалка
Конвейеры (pipes) позволяют объединять несколько команд в цепочку, при этом каждая команда обрабатывает вывод предыдущей. Используйте символ | для соединения команд:
cat data.txt | sort | head -5Данные передаются слева направо через каждую команду последовательно.
Чтобы найти уникальные отсортированные записи:
cat names.txt | sort | uniqКоманда uniq удаляет идущие подряд дубликаты строк, поэтому сначала необходимо выполнить сортировку, чтобы сгруппировать дубликаты вместе.
Чтобы подсчитать количество уникальных записей, добавьте wc -l в конвейер:
cat names.txt | sort | uniq | wc -lПри создании конвейеров убедитесь, что формат вывода одной команды подходит в качестве входных данных для следующей.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Каталоги
Создать каталогСкопировать каталогПереместить и переименовать каталогУдалить каталогИтог - Операции с каталогами7Содержимое файлов
Head и TailПодсчёт словКоманда sortКоманда uniqОсновы grepGrep с флагамиПовторение - Текстовый детектив10Проект анализатора логов
Обзор проектаПросмотр файла лога2Навигация
Вывод текущей рабочей директорииСписок файловСмена директорииАбсолютные и относительные путиДомашняя и корневая директорииИтог - Найди свой путь8Перенаправление
Стандартный выводПерезапись в файлДописывание в файлСтандартный вводСтандартная ошибкаПовторение - Сборщик логов11Права доступа
Понимание прав доступаЧтение прав доступаChmod с числамиChmod с символамиВладение файламиПовторение - Заблокируйте доступ14Проект скрипта резервного копирования
Обзор проектаПолучение пути к источнику3Файлы
Создать файлПрочитать файлСкопировать файлПереместить и переименовать файлУдалить файлПовторение - Операции с файлами6Символы подстановки и шаблоны
Звёздный символ подстановкиВопросительный символ подстановкиСкобочные символы подстановкиКомбинирование символов подстановкиПовторение - выборочные операции9Каналы
Что такое каналЦепочка двух командЦепочка нескольких командКанал с grepИтог - Конвейер данных