Команда cut Linux

Команда cut используется, если нужно вырезать часть текста — при этом он может находиться в файле либо быть напечатанным через стандартный ввод. В Unix-системах эта команда удаляет секции текста, которые были обозначены при помощи байтов, символов или полей, разделенных знаками “-“ и “:”. Работу cut обеспечивает одноименная утилита. Она входит в состав GNU Coreutils, так что по умолчанию доступна во всех дистрибутивах Linux. Также ею можно воспользоваться на машинах с операционной системой BSD.

Мы постараемся подробно рассказать о том, как работать с командой cut, задействовав и стандартный ввод, и текстовые файлы. Ну и, как всегда, дадим примеры использования, чтобы тем, кто впервые сталкивается с выполнением этой команды, было на что ориентироваться.

Синтаксис команды cut

Написание команды cut выглядит следующим образом:

$ cut опции путь_к_файлу

Использовать файл не обязательно. Если на месте его названия поставить прочерк либо не указать ничего, команда возьмет текст из стандартного ввода. При необходимости можно указывать больше файлов, чем один.

Параметры cut

Список опций, которые позволяют управлять поведением команды:

  • -b (–bytes=LIST) — номер байта, набор или диапазон байтов, подлежащих вырезанию.
  • -c (–characters=LIST) — символ, который следует вырезать. Также можно указывать набор либо диапазон символов.
  • -d (–delimiter=DELIM) — с помощью этой опции пользователь устанавливает свой разделитель вместо стандартного TAB.
  • -f (–fields=LIST) — перечень полей для вырезания.
  • -s (–only-delimited) — если была применена эта опция, cut не выводит строки, где нет разделителя.
  • –complement — задает байты, символы или поля, которые останутся в файле или тексте из стандартного ввода. Все остальное будет вырезано.
  • –output-delimiter=STRING — по умолчанию выходной разделитель соответствует входному. Эта опция позволяет задать другой выходной разделитель.
  • -z, –zero-terminated — вместо символа новой строки разделителем будет NULL.

Это основные параметры команды cut, которые нам понадобятся при работе с утилитой.

Примеры использования cut в Linux

Прежде всего создадим файл cut_command_example.txt и поместим его в домашнюю директорию. В теле документа пропишем текст:

Winter: white: snow: frost
Spring: green: grass: warm
Summer: colorful: blossom: hot
Autumn: yellow: leaves: cool

1. Работа с байтами

На первый взгляд кажется, что с помощью байтов удобнее всего задавать координаты символов, которые нужно вырезать. Но не все так просто. В текстах, написанных на английском языке, каждый символ — это один байт, а вот в других языках некоторые буквы, цифры и спецсимволы могут занимать и два, и три, и четыре байта. Эту особенность следует учитывать, принимая во внимание систему кодировки текста, иначе результат выполнения команды будет не таким, как ожидалось.

Чтобы вырезать из текста, напечатанного через стандартный ввод, первый символ, команда cut должна иметь вид:

echo “The sky was yellow as brass.” | cut -b 1

Команда cut Linux

Если же необходимо вырезать несколько символов, их номера указывают через запятую:

echo “I looked at my watch; not eight o’clock.” | cut -b 5,8,17

Команда cut Linux

Нет ничего сложного и в том, чтобы вырезать некоторый диапазон символов. В этом случае номера символов указывают через дефис:

echo “Still I opened the gate, and put the petrol pump in readiness.” | cut -b 38-43

Команда cut Linux

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

Теперь рассмотрим те варианты использования команды, где нужно вырезать символы из текста, который находится в файле. Стандартная запись в терминале выглядит так:

cut -b 1,9 cut_command_example.txt

Как вы можете помнить, в созданном ранее документе было четыре строки. Команда в каждой из них вырезала символы, соответствующие указанным номерам байтов, и вывела их также построчно.

Команда cut Linux

Примерно так же работает вырезание символов в заданном диапазоне. Диапазон – это два числа, написанные через дефис:

cut -b 12-20 cut_command_example.txt

Команда cut Linux

Команду cut можно использовать саму по себе, но не возбраняется сочетать с другими командами. Чаще всего используется sort. Попробуем вырезать первые 4 символа и расположить строки в алфавитном порядке:

cut -b 1-7 cut_command_example.txt | sort

Команда cut Linux

Для сортировки по алфавиту команде sort не нужны дополнительные опции. А вот чтобы расположить строки в обратном порядке, следует добавить к записи -r:

cut -b 1-7 cut_command_example.txt | sort -r

Команда cut Linux

При помощи дефиса, который стоит рядом с числом, обозначающим номер байта, можно задавать неопределенные диапазоны символов. Например, чтобы команда вырезала все символы, начиная с пятого и заканчивая последним, нужно поставить дефис справа от числа:

cut -b 5- cut_command_example.txt

Команда cut Linux

А чтобы были вырезаны все символы, начиная с первого байта и заканчивая шестнадцатым, дефис должен находиться справа от числа:

cut -b -25 cut_command_example.txt

Команда cut Linux

Точно так же дефис используется, если текст задан не из файла, а через стандартный ввод:

echo “The pallid sunlight through the window shone upon my hands.” | cut -b -35

echo “The pallid sunlight through the window shone upon my hands.” | cut -b 35-

Команда cut Linux

2. Работа с символами

Тем, кто обрабатывает огромные массивы текстовых данных, часто приходится использовать команду cut, задавая необходимые параметры с помощью символов. Если текст напечатан через стандартный ввод, вырезать первый символ можно так:

echo “She offered to help me, but that was not allowed.” | cut -c 1

Команда cut Linux

Чтобы вырезать другие символы, следует указать их порядковые номера. Важно помнить о том, что если числовое значение превысит количество символов в строке, команда не будет выполнена.

echo “We worked till dusk, then washed and dressed.” | cut -c 12,31,45

Команда cut Linux

При работе с символами можно использовать диапазоны значений, точно так же, как и при работе с байтами.

echo “The two cars were now racing side by side along the straight road.” | cut -c 17-52

Команда cut Linux

Нередко возникает необходимость вырезать часть текста из готового документа. Чтобы сделать это, достаточно выполнить команду

cut -c 18,25 cut_command_example.txt

Команда cut Linux

Как видно на скриншоте, были вырезаны восемнадцатый и двадцать пятый символы в каждой из строк.

Если же вырезать только первый символ в каждой строке при помощи команды

cut -c 1 cut_command_example.txt

результат будет таким же, как и у команды

cat cut_command_example.txt | cut -c 1

Команда cut Linux

Чтобы вырезать из текстового файла диапазон символов, нужно напечатать в терминале следующую команду:

cut -c 7-34 cut_command_example.txt

Команда cut Linux

Возможность сортировки вырезанных символов сохраняется независимо от того, в байтах или в символах команде cut были заданы параметры текста. Команда sort расставляет символы в алфавитном порядке по умолчанию:

cut -c 1-9 cut_command_example.txt | sort

Команда cut Linux

Расстановка символов в обратном порядке — начиная с конца алфавита — требует применения опции -r:

cut -c 1-9 cut_command_example.txt | sort -r

Команда cut Linux

Уже известный нам трюк с дефисом возле числа можно повторить и в данном случае:

echo “We had had fights for the same reason before now.” | cut -c 12-

Будет вырезана последовательность символов, начиная с двенадцатого и заканчивая последним в строке.

Команда cut Linux

А чтобы вырезать символы, начиная с первого и заканчивая двенадцатым, дефис следует переместить влево:

echo “We had had fights for the same reason before now.” | cut -c -12

Команда cut Linux

С текстом, содержащимся в файле, поступают аналогично:

cut -c -8 cut_command_example.txt

cut -c 8- cut_command_example.txt

Команда вырезает текст в каждой из строк, согласно заданным параметрам.

Команда cut Linux

3. Работа со столбцами

Создавая файл cut_command_example.txt, мы отделяли слова друг от друга не только пробелами, но и двоеточиями. Наконец пришло время использовать эти знаки на практике. А нужны они для того, чтобы вырезать фрагменты текста из столбцов и называются разделителями. Кроме двоеточий и пробелов в качестве разделителей можно использовать дефисы.

Но начнем, как всегда, с текста в стандартном выводе. Чтобы вырезать слово из первого столбца, воспользуемся командой

echo “From the inn issued a smell of frying liver.” | cut -d ‘ ‘ -f 1

Команда cut Linux

В случае с текстовым файлом результат такой же — первое слово каждого столбца напечатано в терминале:

cut -d ‘:’ -f 1 cut_command_example.txt

Команда cut Linux

Чтобы вырезать несколько столбцов, нужно указать их номера. Для текста, напечатанного через стандартный ввод, команда имеет вид:

echo “He was extraordinarily particular about politeness in others.” | cut -d ‘ ‘ -f 1,2,3

В данном примере ее результатом должны быть первые три слова — He was extraordinarily.

Команда cut Linux

При использовании текстового файла аналогичная команда выглядит так:

cut -d ‘:’ -f 1,2,3 cut_command_example.txt

Команда cut Linux

Из файла были вырезаны три первые столбца, а их содержимое выведено в терминал.

Ничуть не хуже команда работает, если задать ей параметры текста в виде диапазона чисел:

echo “Surprised, we looked at one another.” | cut -d ‘ ‘ -f 1-5

Команда cut Linux

Как и ожидалось, были вырезаны столбцы (слова) с первого по пятый. Обратите внимание на два апострофа, которые из раза в раз появляются в записи команды при работе с текстом из стандартного ввода. Эти знаки необходимы, если разделителем является символ пробела. Теперь вырежем диапазон полей из файла:

cut -d ‘:’ -f 1-3 cut_command_example.txt

Команда cut Linux

Точно так же, как раньше сортировали вырезанные символы, мы можем поступить и сейчас — расставить названия сезонов из файла в алфавитном порядке:

cut -d ‘:’ -f 1 cut_command_example.txt | awk ‘‘ | sort

Команда cut Linux

Меняя числовое значение опции -f, можно вырезать и сортировать содержимое других столбцов. Отсортировать названия сезонов в обратном порядке поможет опция -r, добавленная к команде sort:

cut -d ‘:’ -f 1 cut_command_example.txt | awk ‘‘ | sort -r

Команда cut Linux

Вырезать содержимое, начиная с определенного столбца и заканчивая последним в строке, получится, если использовать такую команду, где справа от числа, обозначающего номер начального столбца, стоит дефис:

echo “We became still more friendly.” | cut -d ‘ ‘ -f 2-

Команда cut Linux

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

echo “We became still more friendly.” | cut -d ‘ ‘ -f -2

Команда cut Linux

Работа этой команды с текстовыми файлами не имеет принципиальных отличий:

cut -d ‘:’ -f 2- cut_command_example.txt

cut -d ‘:’ -f -2 cut_command_example.txt

Команда cut Linux

Команда cut также пригодится при работе с массивными CSV-документами. Ее синтаксис и опции в этом случае остаются неизменными. Например, при таком написании будут вырезаны первые два столбца файла с названием file_example.csv:

cut -d ‘,’ -f 1,2 file_example.csv

Выводы

Команда cut linux — это инструмент, который пригодится всем пользователям Linux, которые работают с большими текстовыми документами. Ее возможности поистине фантастические и она имеет немало преимуществ перед другими схожими утилитами.

Как всегда, не стесняйтесь задавать вопросы в комментариях, если какие-то аспекты работы этой команды остались непонятными для вас.

Вы пропустили

AEGIS Algorithms Android Angular Apache Airflow Apache Druid Apache Flink Apache Spark API API Canvas AppSec Architecture Artificial Intelligence Astro Authentication Authorization AutoGPT AWS AWS Aurora AWS Boto3 AWS EC2 AWS Lambda Azure Babylon.js Backend bash Beautiful Soup Bento UI Big Data Binary Tree Browser API Bun Career Cassandra Charts ChatGPT Chrome Extension Clean Code CLI ClickHouse Coding Codux Combine Compose Computer Context Fusion Copilot Cosmo Route CProgramming cron Cryptography CSS CTF Cypress DALL-E Data Analysis Data science Database dbt dbt Cloud deno Design Design Patterns Detekt Development Distributed Systems Django Docker Docker Hub Drizzle DRY DuckDB Express FastAPI Flask Flutter For Beginners Front End Development Game Development GCN GCP Geospatial Git GitHub Actions GitHub Pages Gitlab GMS GoFr Golang Google Google Sheets Google Wire GPT-3 GPT3 Gradio Gradle Grafana Graphic Design GraphQL gRPC Guidance HMS Hotwire HTML Huawei HuggingFace IndexedDB InfoSec Interview iOS Jackknife Java JavaScript Jetpack Compose JSON Kafka Kotlin Kubernetes LangChain Laravel Linux LlaMA LLM localStorage Logging Machine Learning Magento Math Mermaid Micro Frontends Mobile Mobile App Development mondayDB MongoDB Mongoose MySQL Naming NestJS NET NetMock Networks NextJS NLP Node.js Nodejs NoSQL NPM OOP OpenAI OTP Pandas PDF PHP Playwright Plotly Polars PostgreSQL Prefect Productivity Programming Prometheus Puppeteer Pushover Python Pytorch Quarkus Rabbitmq RAG Ramda Raspberry Pi React React Native Reactor Redis REST API Revolut Riverpod RProgramming Ruby Ruby on Rails Rust Scalene SCDB ScyllaDB Selenium Servers Sklearn SLO SnowFlake Snowkase Software Architecture Software Development Solara Solid Spring Boot SQL SQLite Streamlit SudoLang Supabase Swift SwiftUI Tailwind CSS Taipy Terraform Testing Transformers TURN TypeScript Ubuntu UI Design Unix UX UX Design Vim Vite VSCode Vue Web Architecture Web Components Web Development Web Frameworks Web Scraping Web-разработка Webassembly Websocket Whisper Widgets WordPress YAML YouTube Zed Наука о данных Разное Тренды

Как исследовать и визуализировать данные МО для обнаружения объектов на изображениях