Команда Linux cut: Выделение текста

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь использовать команду cut в Linux для извлечения и анализа данных из текстовых файлов. Мы смоделируем ситуацию, когда вы работаете в местной книжной лавке и вам нужно обработать информацию о клиентах и книгах. Команда cut поможет вам извлечь определенные столбцы или поля из ваших файлов данных, что обеспечит эффективное управление и анализ данных.

Предварительные требования

Перед началом этого практического занятия убедитесь, что у вас есть:

  • Базовое знакомство с командной строкой Linux
  • Доступ к терминалу Linux (в этом практическом занятии предполагается, что вы используете терминал в директории /home/labex/project)
Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 94%. Он получил 99% положительных отзывов от учащихся.

Понимание данных книжной лавки

Начнем с изучения файлов данных книжной лавки. У нас есть два файла: customers.txt и books.txt.

Сначала посмотрим на содержимое файла customers.txt:

cat /home/labex/project/customers.txt

Вы должны увидеть вывод, похожий на следующий:

ID,Name,Age,Email
1,John Doe,25,[email protected]
2,Jane Smith,35,[email protected]
3,Lily Chen,30,[email protected]
4,Andy Brown,22,[email protected]

Теперь посмотрим на файл 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 (comma-separated values, значения, разделенные запятыми) с различными полями для клиентов и книг.

Если вы не видите ожидаемый вывод или сталкиваетесь с ошибкой, проверьте следующее:

  • Убедитесь, что вы находитесь в правильной директории (/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 также позволяет извлекать диапазон полей. Давайте извлечем все поля от идентификатора клиента до возраста (поля от 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

Эта команда использует here-документ (<<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, если вам нужна дополнительная информация.

Ресурсы