Введение
В этой лабораторной работе вы научитесь использовать команду 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: указывает диапазон полей от 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
Эта команда использует документ «здесь» (<<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, если вам потребуется дополнительная информация.



