Руководство по использованию команды cut в Linux

Команда cut в Linux — это мощная утилита для обработки текста, используемая для извлечения определенных разделов из каждой строки файла или из введенных данных. Она не изменяет оригинальный файл, а просто считывает содержимое и отображает нужные части на стандартном выходе. В этой статье мы исследуем назначение команды cut в Linux и продемонстрируем, как ее использовать на практических, реальных примерах.
Понимание команды cut
Команда cut является ценным инструментом для всех, кто работает с структурированным текстом, позволяя эффективно манипулировать и извлекать данные в системах, подобных Unix. Она извлекает части строки на основе позиций байтов, позиций символов, разделителей или полей. Это делает ее особенно полезной для фильтрации и организации данных в скриптах оболочки и командных операциях. Она также полезна для таких задач, как извлечение столбцов из файлов CSV, обрезка символов или анализ файлов журналов. Хотя она обычно используется с файлами, команда cut также может обрабатывать вывод других команд при использовании в конвейере.
Основной синтаксис команды cut
Команда cut имеет очень простой синтаксис, который использует параметры и имя файла. Вот как это работает:
cut[OPTIONS][FILE]Здесь OPTIONS позволяет вам контролировать, как работает команда cut. Вы можете выбрать разделитель полей (например, запятую), выбрать определенные поля, установить диапазоны полей, игнорировать строки без разделителя и т. д. FILE — это целевой файл, из которого вы хотите извлечь данные. Команда cut будет считывать из стандартного ввода, если вы не укажете файл. Более того, вы можете указать несколько файлов; в этом случае команда cut будет обрабатывать их как один, комбинируя их содержимое перед обработкой.
Общие используемые параметры
Команда cut позволяет вам извлекать определенные части текста из файла или ввода. Вы можете указать, что извлекать, с помощью различных параметров, таких как байты, символы или поля, и задав определенный разделитель (разделитель). Вот общие параметры:
- -f или –fields=LIST: Выбирает конкретные поля на основе выбранного разделителя.
- -b или –bytes=LIST: Извлекает определенные байты из каждой строки.
- -c или –characters=LIST: Извлекает конкретные символы из каждой строки.
- -d или –delimiter: Устанавливает пользовательский разделитель вместо табуляции по умолчанию.
- –complement: Показывает все, кроме выбранных полей, байтов или символов.
- -s или –only-delimited: Пропускает строки, где нет разделителя. По умолчанию такие строки включаются.
- –output-delimiter: Позволяет выбрать другой разделитель для вывода. По умолчанию cut использует тот же разделитель, что и входные данные.
Параметры -f, -b и -c используют LIST для определения того, что извлекать, например, поля, байты или символы. Вы можете указать следующее:
- Один номер, например, 2
- Несколько номеров, разделенных запятыми, например, 1,3,5
- Диапазон, например, 2-4 (означает извлечение с 2 по 4)
N-, чтобы обозначить с позиции N до конца-M, чтобы обозначить с начала до позиции M
Как работает команда cut в Linux
Давайте посмотрим на несколько практических примеров, чтобы понять, как работает команда cut в Linux. Для этого сначала создадим файл под названием “mte.csv” с помощью команды echo:
echo-e"empID,empName,empDesig\n101,Anees,Author\n102,Asghar,Manager\n103,Damian,CEO"> mte.csvДавайте проверим содержимое файла с помощью команды cat:
cat mte.csv
Здесь важно отметить, что команда cut не изменяет файл, вместо этого она просто показывает выбранный вывод на основе ваших запросов.
Извлечение данных по символам
Используйте параметр -c вместе с командой cut, чтобы извлечь символы по позициям:
cut-c1,8 mte.csvЭта команда извлекает первый и восьмой символы из каждой строки:
Чтобы извлечь символы между конкретными позициями или в диапазоне, мы можем использовать команду cut следующим образом:
cut-c1-8 mte.csvЭта команда извлекает восьмые символы (с 1 по 8) из каждой строки:
Извлечение по байту
Мы можем использовать параметр -b с командой cut, чтобы извлечь определенные байты из каждой строки:
cut-b1-3 mte.csvЭта команда извлекает первые три байта из каждой строки файла с именем mte.csv:
Извлечение по полю (столбцу)
Вы можете извлечь целое поле из файла с помощью команды cut. Для этого используйте параметр -f с -d, как показано ниже:
cut-d','-f2 mte.csvВ этой команде -d',' устанавливает разделитель на запятую, а -f2 говорит cut извлечь второе поле из каждой строки в файле mte.csv:
Использование пользовательских разделителей в cut
Команда cut по умолчанию использует знак табуляции как разделитель. Однако, если ваши поля разделены чем-то, кроме табуляции, используйте -d, чтобы установить правильный. Например, мы можем получить пятое слово из предложения, разделенного пробелами, используя разделитель -d следующим образом:
echo"Hey! Geeks Welcome to Maketecheasier.com"|cut-d' '-f5Пропуск определенных полей при извлечении
Вы можете исключить конкретные поля во время извлечения текста из файла, используя параметр --complement с командой cut. Этот параметр инструктирует команду cut выводить все поля, кроме указанных:
cut-d','-f1 mte.csv --complementЭта команда пропустит первый столбец и вернет остальное содержимое:
Изменение разделителя по умолчанию в выводе
По умолчанию команда cut сохраняет разделитель входных данных в выводе при извлечении полей. Однако вы можете изменить разделитель вывода, используя параметр --output-delimiter при работе с извлечением на основе полей:
cut-d','-f1-3--output-delimiter='-' mte.csvЭта команда использует дефис - в качестве разделителя в выводе:
Использование cut с другими полезными командами Linux
Вы также можете использовать cut с другими командами Linux, используя символ конвейера. Например, следующая команда извлекает первые 5 символов из каждой строки вывода команды who:
who|cut-c1-5В следующем примере мы используем команду cut вместе с head, чтобы отобразить первые две строки файла “mte.csv” и извлечь только поля empName и empDesig:
head-n2 mte.csv |cut-d',' -f2,3Управление нерегулярными форматами данных с помощью команды cut в Linux
Команда cut работает лучше всего, когда данные четко организованы, с одним и тем же разделителем (например, запятой или табуляцией), разделяющим каждую часть. Но если файл имеет неравномерные пробелы или смешанные разделители, cut может не работать хорошо сам по себе. В таких ситуациях полезно сначала очистить данные с помощью команд, таких как tr или sed, чтобы убедиться, что cut может извлечь нужные части.
Обработка лишних пробелов
Рассмотрим файл с именем “mteData.txt”, в котором поля разделены несколькими пробелами, как показано ниже:
cat mteData.txtПоскольку cut ожидает один последовательный разделитель, мы можем упростить пробелы с помощью tr перед применением cut:
cat mteData.txt |tr-s' '|cut-d' '-f1-2Эта команда считывает содержимое “mteData.txt”, использует tr, чтобы заменить несколько пробелов на один, а затем использует cut, чтобы извлечь первые два поля, разделенные пробелом:
Обработка смешанных разделителей
Если файл использует комбинацию пробелов и запятых в качестве разделителей, мы можем нормализовать формат с помощью sed. Например, файл с именем “mteData1.txt” содержит следующее содержимое:
cat mteData1.txtДавайте используем команду sed вместе с командой cut, чтобы заменить все пробелы на запятую, а затем извлечь первые и третьи поля, разделенные запятыми:
sed's/ /,/g' mteData1.txt |cut-d',' -f1,3Заключение
В этой статье мы исследовали команду cut в Linux, полезную команду для извлечения данных из файлов или введенных данных. С ее простым синтаксисом вы можете легко получать символы, байты или поля на основе разделителя. Мы также продемонстрировали, как использовать команду cut с другими командами, такими как tr, sed и head, чтобы управлять неряшливыми данными и упрощать вывод. Будь то работа с файлами CSV, анализ журналов или очистка данных, команда cut является незаменимым инструментом для обработки текста в системах, подобных Unix.