Введение
Добро пожаловать в лабораторию по обработке текста в Linux. В этой лабораторной работе вы научитесь использовать команду cut в Linux для извлечения определенных частей текстовых файлов. Команда cut представляет собой мощный инструмент для обработки текста, который позволяет извлекать фрагменты из каждой строки файлов или из передаваемых по конвейеру данных.
Вы научитесь использовать различные параметры команды cut для извлечения текста на основе разделителей и позиций символов. Этот навык особенно полезен при работе со структурированными текстовыми файлами, такими как CSV-файлы, логи или любые данные, которые следуют определенному формату.
По завершении этой лабораторной работы вы сможете эффективно извлекать и обрабатывать текстовые данные в среде Linux, что является фундаментальным навыком для системного администрирования, обработки данных и автоматизации задач.
Понимание базового использования команды cut
На этом этапе вы научитесь базовому использованию команды cut. Команда cut в Linux используется для извлечения фрагментов из каждой строки файлов или из данных, передаваемых по конвейеру.
Начнем с создания простого файла с данными, с которым мы будем работать:
cd ~/project
echo "name:age:city:occupation" > data/users.txt
echo "Alice:25:New York:Engineer" >> data/users.txt
echo "Bob:30:San Francisco:Designer" >> data/users.txt
echo "Charlie:22:Chicago:Student" >> data/users.txt
echo "Diana:28:Boston:Doctor" >> data/users.txt
Вышеприведенные команды создают файл с именем users.txt в каталоге ~/project/data с пятью строками значений, разделенными двоеточием.
Теперь давайте посмотрим на содержимое этого файла:
cat data/users.txt
Вы должны увидеть следующий вывод:
name:age:city:occupation
Alice:25:New York:Engineer
Bob:30:San Francisco:Designer
Charlie:22:Chicago:Student
Diana:28:Boston:Doctor
Использование команды cut с разделителем
Самым распространенным способом использования команды cut является использование разделителя для извлечения определенных полей. Базовый синтаксис выглядит так:
cut -d'delimiter' -f fields file
Где:
-dзадает символ-разделитель-fзадает, какие поле(я) нужно извлечьfile- это входной файл
Давайте извлечем имена (первое поле) из нашего файла с данными:
cut -d':' -f1 data/users.txt
Эта команда сообщает команде cut:
- Использовать
:в качестве разделителя (-d':') - Извлечь первое поле (
-f1) - Из файла
data/users.txt
Вы должны увидеть следующий вывод:
name
Alice
Bob
Charlie
Diana
Теперь давайте извлечем возраст (второе поле):
cut -d':' -f2 data/users.txt
Вывод:
age
25
30
22
28
Извлечение нескольких полей
Вы можете извлечь несколько полей, указав их в виде списка, разделенного запятыми:
cut -d':' -f1,3 data/users.txt
Это извлекает первое и третье поля (имя и город):
name:city
Alice:New York
Bob:San Francisco
Charlie:Chicago
Diana:Boston
Извлечение диапазона полей
Вы также можете извлечь диапазон полей, используя дефис:
cut -d':' -f2-4 data/users.txt
Это извлекает поля от 2 до 4 (возраст, город и профессия):
age:city:occupation
25:New York:Engineer
30:San Francisco:Designer
22:Chicago:Student
28:Boston:Doctor
Комбинирование с другими командами
Команду cut можно комбинировать с другими командами с помощью конвейеров. Например, чтобы извлечь только возраст тех людей, которые являются инженерами:
grep "Engineer" data/users.txt | cut -d':' -f2
Вывод:
25
Попробуйте поэкспериментировать с разными комбинациями полей, чтобы привыкнуть к этой команде.
Выделение по позиции символов
В дополнение к выделению полей на основе разделителей, команда cut также может извлекать текст на основе позиции символов. Это полезно при работе с форматами данных фиксированной ширины или когда вам нужно извлечь определенные символы из каждой строки.
Создание данных фиксированной ширины
Создадим новый файл с данными фиксированной ширины, чтобы продемонстрировать эту функцию:
cd ~/project
echo "ID Name Department Salary" > data/employees.txt
echo "001 John IT 75000" >> data/employees.txt
echo "002 Mary HR 65000" >> data/employees.txt
echo "003 Steve Sales 85000" >> data/employees.txt
echo "004 Jennifer Marketing 70000" >> data/employees.txt
Теперь посмотрим на этот файл:
cat data/employees.txt
Вы должны увидеть:
ID Name Department Salary
001 John IT 75000
002 Mary HR 65000
003 Steve Sales 85000
004 Jennifer Marketing 70000
Извлечение по позиции символов
Для извлечения текста на основе позиции символов используйте опцию -c, за которой следует указать позиции, которые вы хотите извлечь. Синтаксис выглядит так:
cut -c positions file
Извлечем идентификаторы сотрудников (первые 3 символа) из нашего файла с данными:
cut -c1-3 data/employees.txt
Эта команда сообщает команде cut извлечь символы с 1 по 3 из каждой строки. Вы должны увидеть:
ID
001
002
003
004
Извлечение определенных символов
Вы также можете извлекать определенные, не последовательные символы:
cut -c1,5,9 data/employees.txt
Это извлекает 1-й, 5-й и 9-й символ из каждой строки:
I N
0 J
0 M
0 S
0 J
Извлечение от определенной позиции до конца строки
Для извлечения символов от определенной позиции до конца строки используйте дефис после номера позиции:
cut -c5- data/employees.txt
Это извлекает символы с позиции 5 до конца каждой строки:
Name Department Salary
John IT 75000
Mary HR 65000
Steve Sales 85000
Jennifer Marketing 70000
Комбинирование извлечения по позиции символов с конвейером
Вы можете комбинировать команду cut с другими командами с помощью конвейеров. Например, чтобы извлечь только названия отделов (символы с 13 по 22) у сотрудников с зарплатой более 70000:
grep -E "[7-9][0-9]000" data/employees.txt | cut -c13-22
Должен быть выведен следующий результат:
IT
Sales
Практическое упражнение
Попробуйте извлечь только имена (символы с 5 по 12) из файла сотрудников:
cut -c5-12 data/employees.txt
Вы должны увидеть:
Name
John
Mary
Steve
Jennifer
Как вы можете видеть, выделение по позиции символов особенно полезно для обработки форматов данных фиксированной ширины, где каждое поле занимает определенное количество символов в каждой строке.
Совмещение команды cut с другими инструментами обработки текста
На этом этапе вы узнаете, как комбинировать команду cut с другими командами Linux для обработки текста, чтобы выполнять более сложные задачи по извлечению и манипуляции данными.
Создание файла с данными в формате CSV
Сначала создадим файл в формате CSV (Comma-Separated Values, разделенных запятыми значения), с которым будем работать:
cd ~/project
echo "Date,Product,Quantity,Price,Total" > data/sales.csv
echo "2023-01-15,Laptop,5,1200,6000" >> data/sales.csv
echo "2023-01-16,Mouse,20,25,500" >> data/sales.csv
echo "2023-01-17,Keyboard,15,50,750" >> data/sales.csv
echo "2023-01-18,Monitor,8,200,1600" >> data/sales.csv
echo "2023-01-19,Headphones,12,80,960" >> data/sales.csv
Проверим содержимое этого файла:
cat data/sales.csv
Вы должны увидеть:
Date,Product,Quantity,Price,Total
2023-01-15,Laptop,5,1200,6000
2023-01-16,Mouse,20,25,500
2023-01-17,Keyboard,15,50,750
2023-01-18,Monitor,8,200,1600
2023-01-19,Headphones,12,80,960
Комбинирование команды cut с командой grep
Вы можете использовать команду grep для поиска строк, содержащих определенные шаблоны, а затем использовать команду cut для извлечения определенных полей из этих строк:
grep "Laptop" data/sales.csv | cut -d',' -f3-5
Эта команда сначала находит все строки, содержащие "Laptop", а затем извлекает поля 3 - 5 (Количество, Цена и Итого). Вы должны увидеть:
5,1200,6000
Комбинирование команды cut с командой sort
Вы можете использовать команду sort для сортировки данных на основе определенного поля:
cut -d',' -f2,4 data/sales.csv | sort -t',' -k2nr
Эта команда извлекает Продукт (поле 2) и Цену (поле 4), а затем сортирует их по цене в обратном числовом порядке. Опция -t',' задает разделитель для команды sort, -k2 указывает на сортировку по второму полю, n означает числовую сортировку, а r - обратный порядок.
Вы должны увидеть:
Product,Price
Laptop,1200
Monitor,200
Headphones,80
Keyboard,50
Mouse,25
Комбинирование команды cut с командой sed
Команда sed представляет собой потоковый редактор, который может выполнять базовые преобразования текста. Вот пример комбинирования команды cut с командой sed:
cut -d',' -f1,2,5 data/sales.csv | sed 's/,/ - /g'
Эта команда извлекает поля Дата, Продукт и Итого, а затем заменяет все запятые на " - ". Вы должны увидеть:
Date - Product - Total
2023-01-15 - Laptop - 6000
2023-01-16 - Mouse - 500
2023-01-17 - Keyboard - 750
2023-01-18 - Monitor - 1600
2023-01-19 - Headphones - 960
Комбинирование команды cut с командой awk
Команда awk представляет собой мощный инструмент для обработки текста. Вот как можно комбинировать ее с командой cut:
cut -d',' -f2-4 data/sales.csv | awk -F',' 'NR > 1 {print $1 " costs $" $3 " per unit"}'
Эта команда извлекает поля 2 - 4 (Продукт, Количество и Цена), а затем использует команду awk для форматирования сообщения. Условие NR > 1 пропускает строку заголовка, а оператор вывода форматирует выходные данные.
Вы должны увидеть:
Laptop costs $1200 per unit
Mouse costs $25 per unit
Keyboard costs $50 per unit
Monitor costs $200 per unit
Headphones costs $80 per unit
Обработка нескольких файлов
Вы также можете использовать команду cut с несколькими файлами. Создадим еще один файл:
echo "Category,Product,Stock" > data/inventory.csv
echo "Electronics,Laptop,15" >> data/inventory.csv
echo "Accessories,Mouse,50" >> data/inventory.csv
echo "Accessories,Keyboard,30" >> data/inventory.csv
echo "Electronics,Monitor,20" >> data/inventory.csv
echo "Accessories,Headphones,25" >> data/inventory.csv
Теперь извлечем поле Продукт из обоих файлов:
cut -d',' -f2 data/sales.csv data/inventory.csv
Вы должны увидеть:
Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Команда cut обрабатывает все файлы и выводит все результаты последовательно. Обратите внимание, что обе строки заголовка включены.
Комбинируя команду cut с другими инструментами обработки текста, вы можете эффективно выполнять сложные задачи по манипуляции данными в Linux.
Практические применения команды cut
На этом этапе вы рассмотрите некоторые практические применения команды cut, которые могут встретиться в реальных сценариях.
Анализ лог - файлов
Лог - файлы являются распространенным случаем использования инструментов обработки текста. Создадим простой файл доступа в стиле Apache:
cd ~/project
cat > data/access.log << EOF
192.168.1.100 - - [15/Feb/2023:10:12:01 -0500] "GET /index.html HTTP/1.1" 200 2048
192.168.1.102 - - [15/Feb/2023:10:13:25 -0500] "GET /images/logo.png HTTP/1.1" 200 4096
192.168.1.103 - - [15/Feb/2023:10:14:10 -0500] "POST /login.php HTTP/1.1" 302 1024
192.168.1.100 - - [15/Feb/2023:10:15:30 -0500] "GET /dashboard.html HTTP/1.1" 200 3072
192.168.1.104 - - [15/Feb/2023:10:16:22 -0500] "GET /css/style.css HTTP/1.1" 404 512
192.168.1.105 - - [15/Feb/2023:10:17:40 -0500] "GET /index.html HTTP/1.1" 200 2048
EOF
Извлечем IP - адреса (первое поле) из лог - файла:
cut -d' ' -f1 data/access.log
Вы должны увидеть:
192.168.1.100
192.168.1.102
192.168.1.103
192.168.1.100
192.168.1.104
192.168.1.105
Теперь извлечем HTTP - статус - коды (девятое поле):
cut -d' ' -f9 data/access.log
Вы должны увидеть:
200
200
302
200
404
200
Обработка конфигурационных файлов
Еще один распространенный случай использования - обработка конфигурационных файлов. Создадим простой конфигурационный файл:
cat > data/config.ini << EOF
[Database]
host=localhost
port=3306
user=dbuser
password=dbpass
[Server]
host=192.168.1.10
port=8080
maxConnections=100
[Logging]
level=INFO
file=/var/log/app.log
EOF
Для извлечения всех имен параметров (часть перед знаком равенства):
grep -v "^\[" data/config.ini | cut -d'=' -f1
Эта команда использует grep -v "^\[" для исключения заголовков разделов (строк, начинающихся с [), а затем использует cut для извлечения части перед =. Вы должны увидеть:
host
port
user
password
host
port
maxConnections
level
file
Извлечение данных из CSV - файлов для отчетности
Создадим более сложный CSV - файл, представляющий оценки студентов:
cat > data/grades.csv << EOF
StudentID,Name,Math,Science,English,History,Average
S001,John Smith,85,92,78,88,85.75
S002,Mary Johnson,90,88,92,85,88.75
S003,Robert Davis,78,80,85,92,83.75
S004,Jennifer Lee,95,93,90,87,91.25
S005,Michael Brown,82,85,88,90,86.25
EOF
Для создания простого отчета, показывающего имена студентов и их средние оценки:
tail -n +2 data/grades.csv | cut -d',' -f2,6
Команда tail -n +2 пропускает строку заголовка, а cut извлекает поля Имя и Средняя оценка. Вы должны увидеть:
John Smith,85.75
Mary Johnson,88.75
Robert Davis,83.75
Jennifer Lee,91.25
Michael Brown,86.25
Для поиска студентов со средней оценкой выше 85:
tail -n +2 data/grades.csv | cut -d',' -f2,6 | awk -F',' '$2 > 85 {print $1 " has an average of " $2}'
Вы должны увидеть:
John Smith has an average of 85.75
Mary Johnson has an average of 88.75
Jennifer Lee has an average of 91.25
Michael Brown has an average of 86.25
Извлечение определенных столбцов из вывода команды
Вы можете использовать cut для извлечения определенных столбцов из вывода команды. Например, чтобы вывести только имена файлов и их размеры в текущем каталоге:
ls -l ~/project/data | tail -n +2 | cut -d' ' -f5,9
Эта команда выводит файлы в длинном формате, пропускает строку заголовка и извлекает размер (поле 5) и имя (поле 9). Точный вывод будет зависеть от ваших файлов, но он будет выглядеть примерно так:
237 access.log
99 config.ini
203 employees.txt
179 grades.csv
110 inventory.csv
150 sales.csv
264 users.txt
Эти примеры демонстрируют, как команда cut может быть использована в различных практических сценариях для извлечения и обработки определенных частей текстовых данных.
Резюме
В этом практическом занятии вы узнали, как использовать команду Linux cut для извлечения определенных частей текста из файлов. Вы изучили:
- Базовое использование команды
cutс разделителями для извлечения полей из структурированных текстовых файлов - Как извлекать текст на основе позиций символов для форматов данных с фиксированной шириной
- Комбинирование команды
cutс другими инструментами обработки текста, такими какgrep,sort,sedиawk, для более сложной манипуляции данными - Практические применения команды
cutв общих сценариях, таких как анализ логов, обработка конфигурационных файлов и отчетность по данным
Команда cut представляет собой мощный инструмент в наборе средств обработки текста Linux. Хотя на первый взгляд она может показаться простой, ее способность извлекать определенные части текста делает ее неоценимой для многих задач обработки данных. При комбинировании с другими командами Linux с помощью конвейеров (pipes) она становится частью гибкой и мощной системы обработки текста.
Некоторые важные выводы:
- Используйте
-d, чтобы указать разделитель, и-f, чтобы выбрать поля при работе со структурированным текстом - Используйте
-cдля извлечения определенных символов при работе с данными фиксированной ширины - Комбинируйте команду
cutс другими командами с помощью конвейеров для более сложной обработки - Команда
cutнаиболее эффективна, когда данные имеют последовательный формат
С этими навыками вы теперь можете эффективно извлекать и обрабатывать текстовые данные в среде Linux, что является важным аспектом различных административных и задач обработки данных.



