Введение
В ходе этой практической работы вы научитесь использовать команду cut в Linux для извлечения и анализа данных из текстовых файлов. Мы смоделируем ситуацию, в которой вы работаете в местном книжном магазине и вам необходимо обрабатывать информацию о клиентах и книгах. Команда cut поможет вам извлекать конкретные столбцы или поля из файлов данных, что обеспечит эффективное управление информацией и ее анализ.
Предварительные требования
Перед началом работы убедитесь, что у вас есть:
- Базовые навыки работы с командной строкой Linux
- Доступ к терминалу Linux (предполагается, что вы используете терминал в директории
/home/labex/project)
Изучение данных книжного магазина
Начнем с изучения файлов данных книжного магазина. У нас есть два файла: customers.txt и books.txt.
Сначала просмотрим содержимое файла customers.txt:
cat /home/labex/project/customers.txt
Вы должны увидеть вывод, похожий на этот:
ID,Name,Age,Email
1,John Doe,25,john.doe@email.com
2,Jane Smith,35,jane.smith@email.com
3,Lily Chen,30,lily.chen@email.com
4,Andy Brown,22,andy.brown@email.com
Теперь посмотрим на файл books.txt:
cat /home/labex/project/books.txt
Результат должен быть следующим:
ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99
Эти файлы содержат значения, разделенные запятыми (CSV), с различными полями для клиентов и книг.
Если вы не видите ожидаемого вывода или столкнулись с ошибкой, проверьте следующее:
- Убедитесь, что вы находитесь в правильной директории (
/home/labex/project) - Проверьте наличие файлов, выполнив команду
ls -l - Если файлы отсутствуют, возможно, вам придется создать их вручную или обратиться к администратору лаборатории
Извлечение имен клиентов
Теперь, когда мы ознакомились с данными, воспользуемся командой cut для извлечения конкретной информации. Начнем с получения имен клиентов из файла customers.txt.
Команда cut использует опцию -d для указания разделителя (в нашем случае это запятая) и опцию -f для выбора отображаемых полей.
Выполните следующую команду:
cut -d ',' -f 2 /home/labex/project/customers.txt
Разберем эту команду:
cut: Название используемой команды-d ',': Указывает, что в качестве разделителя между полями используется запятая-f 2: Предписываетcutизвлечь второе поле/home/labex/project/customers.txt: Путь к нашему входному файлу
Вы должны увидеть такой результат:
Name
John Doe
Jane Smith
Lily Chen
Andy Brown
Обратите внимание, что заголовок "Name" также включен в вывод. Это происходит потому, что cut обрабатывает строку заголовка так же, как и любую другую строку в файле.
Если вы хотите исключить заголовок, можно использовать команду tail в сочетании с cut:
cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2
Этот конвейер выполняет два действия:
cutизвлекает второе поле (имена) из каждой строкиtail -n +2выводит данные, начиная со второй строки, тем самым пропуская заголовок
Теперь вывод должен быть таким:
John Doe
Jane Smith
Lily Chen
Andy Brown
Если вы не видите ожидаемого результата:
- Убедитесь, что вы ввели команду в точности так, как показано
- Проверьте, не был ли изменен файл
customers.txt - Попробуйте снова выполнить
cat /home/labex/project/customers.txt, чтобы проверить содержимое файла
Извлечение нескольких полей
Часто возникает необходимость извлечь сразу несколько полей из данных. Давайте получим одновременно имена и возраст клиентов из файла customers.txt.
Используйте следующую команду:
cut -d ',' -f 2,3 /home/labex/project/customers.txt
Эта команда похожа на предыдущую, но теперь в опции -f мы указываем два поля:
-f 2,3: Извлечь второе и третье поля (имя и возраст)
Ваш вывод должен выглядеть так:
Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22
Как видите, можно указать несколько полей, перечислив их через запятую в опции -f. В выводе сохраняется исходный разделитель (запятая) между извлеченными полями.
Если ваш результат не совпадает:
- Убедитесь, что вы поставили запятую между 2 и 3 в опции
-f - Проверьте, не вносились ли изменения в файл
customers.txt - Попробуйте выполнить команду без опции
-d ',', чтобы проверить, не используется ли в файле другой разделитель
Извлечение диапазона полей
Команда cut также позволяет извлекать диапазон полей. Давайте извлечем все поля от ID клиента до возраста (поля с 1 по 3) из файла customers.txt.
Используйте эту команду:
cut -d ',' -f 1-3 /home/labex/project/customers.txt
Что нового в этой команде:
-f 1-3: Указывает диапазон полей с первого по третье включительно
Ваш результат должен быть похож на этот:
ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22
Эта команда извлекает диапазон полей с 1 по 3. Вы также можете комбинировать диапазоны и отдельные поля, например -f 1-3,5 для извлечения полей 1, 2, 3 и 5.
Если вы не видите ожидаемого вывода:
- Проверьте, что вы использовали дефис (-) между 1 и 3 в опции
-f - Убедитесь, что файл
customers.txtне был изменен - Попробуйте извлечь каждое поле по отдельности (например,
-f 1,-f 2,-f 3), чтобы убедиться в наличии всех полей в файле
Работа с полями фиксированной ширины
Иногда данные разделены не специальными символами, а выровнены по столбцам фиксированной ширины. Команда cut умеет обрабатывать и такие случаи, используя опцию -c для указания позиций символов.
Создадим новый файл с данными фиксированной ширины:
cat << EOF > /home/labex/project/inventory.txt
ISBN Title Quantity
1234567890The Great Adv 100
2345678901Mystery in th 75
3456789012Cooking Basi 50
4567890123Science Exp 125
EOF
Эта команда использует "here-document" (<<EOF) для создания нового файла inventory.txt с данными фиксированной ширины.
Теперь извлечем только названия книг, используя позиции символов:
cut -c 11-25 /home/labex/project/inventory.txt
Разбор новой опции:
-c 11-25: Предписываетcutизвлечь символы с 11-го по 25-й в каждой строке
Вы должны увидеть:
itle Q
The Great Adv
Mystery in th
Cooking Basi
Science Exp
Эта команда извлекает символы с 11 по 25 из каждой строки, что соответствует полю названия в наших данных фиксированной ширины.
Если вы не получили ожидаемый результат:
- Убедитесь, что файл
inventory.txtбыл создан правильно (проверьте с помощьюcat /home/labex/project/inventory.txt) - Проверьте правильность указанного диапазона символов (
11-25) - Попробуйте скорректировать диапазон, если названия кажутся смещенными
Сочетание cut с другими командами
Команда cut становится еще мощнее в сочетании с другими инструментами Linux. Давайте используем cut вместе с grep, чтобы найти все книги дороже 20 долларов и вывести их названия.
Выполните эту команду:
grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2
Этот конвейер команд выполняет два действия:
grep -E ',[2-9][0-9]\.[0-9]{2}$': Использует регулярное выражение для поиска строк, где цена составляет 20 долларов и более,[2-9][0-9]\.[0-9]{2}$: Ищет запятую, за которой следует число от 20 до 99, точка и еще две цифры в конце строки
cut -d ',' -f 2: Извлекает только название книги (второе поле) из строк, найденных командойgrep
Вы должны увидеть результат, похожий на:
Mystery in the Woods
Science Explained
Если вы не видите ожидаемого вывода:
- Проверьте, содержит ли файл
books.txtкорректные данные - Убедитесь, что вы правильно ввели регулярное выражение для
grep - Попробуйте запустить команду
grepотдельно, чтобы увидеть, какие строки она выбирает - Убедитесь, что в команзе
cutправильно указано второе поле
Резюме
В ходе этой практической работы вы научились использовать команду cut в Linux для извлечения конкретных данных из текстовых файлов. Вы попрактиковались в:
- Извлечении отдельных полей из CSV-файлов
- Извлечении нескольких полей и диапазонов полей
- Работе с данными фиксированной ширины
- Сочетании
cutс другими командами, такими какgrep
эти навыки неоценимы для обработки и анализа данных в различных сценариях: от управления инвентарем книжного магазина до обработки любых структурированных текстовых данных.
Дополнительные параметры команды cut, не затронутые в этой работе:
-s: Не выводить строки, не содержащие разделителей--output-delimiter=STRING: Использовать STRING в качестве разделителя в выводе--complement: Извлечь все части строки, КРОМЕ выбранных байтов, символов или полей
Для дальнейшего обучения попробуйте поэкспериментировать с этими параметрами и создайте свои собственные файлы данных для практики. Помните, что команда man cut предоставляет полную справку по использованию cut, если вам понадобится дополнительная информация.



