Команда Linux cut: Извлечение текста

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

Введение

В ходе этой практической работы вы научитесь использовать команду 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

Этот конвейер выполняет два действия:

  1. cut извлекает второе поле (имена) из каждой строки
  2. 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

Этот конвейер команд выполняет два действия:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': Использует регулярное выражение для поиска строк, где цена составляет 20 долларов и более
    • ,[2-9][0-9]\.[0-9]{2}$: Ищет запятую, за которой следует число от 20 до 99, точка и еще две цифры в конце строки
  2. 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, если вам понадобится дополнительная информация.

Ресурсы