← Назад к вопросам

Для чего cut в Terminal

1.6 Junior🔥 141 комментариев
#Инструменты тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Назначение команды cut в терминале

Команда cut — это мощный инструмент командной строки Unix/Linux, предназначенный для извлечения определенных частей текста из каждой строки входных данных (файлов или потока stdin). Основное её применение — работа с табличными данными, лог-файлами, CSV и другими структурированными текстами, где данные разделены на колонки с помощью разделителей (delimiters) или имеют фиксированную ширину полей.

Основные сценарии использования cut

  1. Извлечение колонок из текста с разделителями.
    Чаще всего `cut` используется для выбора определенных полей, разделенных символом-разделителем, например, запятой (CSV), табуляцией или двоеточием (как в файле `/etc/passwd`).

```bash
# Извлечь первое и третье поля из файла, где поля разделены двоеточием
cut -d':' -f1,3 /etc/passwd

# Извлечь первое и второе поля из CSV (разделитель - запятая)
cut -d',' -f1,2 data.csv
```

2. Извлечение символов по позициям.

    Команда может вырезать символы, находящиеся в конкретных позициях (или диапазонах позиций) в каждой строке. Это полезно для данных с **фиксированной шириной полей**.

```bash
# Извлечь символы с 1-го по 10-й в каждой строке файла
cut -c1-10 fixed_width_data.txt

# Извлечь 5-й и 10-й символы
cut -c5,10 file.txt
```

3. Извлечение байтов по позициям.

    В редких случаях, когда нужно работать именно с байтами (например, для бинарных данных или однобайтовых кодировок), используется ключ `-b`. Для многобайтовых кодировок (UTF-8) это поведение может быть некорректным.

Ключевые опции команды cut

  • -d DELIMITER (--delimiter): Задает символ-разделитель полей. По умолчанию используется табуляция.
  • -f LIST (--fields): Указывает номера полей (колонок), которые нужно извлечь. Номера можно перечислять через запятую (1,3) или задавать диапазоны (2-5, 3- — от 3 до конца строки).
  • -c LIST (--characters): Указывает номера символов (или диапазоны) для извлечения.
  • -b LIST (--bytes): Указывает номера байтов (или диапазоны) для извлечения.
  • --complement: Полезная опция, которая инвертирует выбор. Извлекаются все части строки, кроме указанных полей, символов или байтов.
    # Извлечь все поля, КРОМЕ первого (полезно для "обрезки" заголовка)
    cut -d',' -f1 --complement data.csv
    

Практические примеры для QA Engineer

  1. Анализ логов:

    # Допустим, в лог-файле app.log каждая строка имеет формат: [TIMESTAMP] [LEVEL] Message
    # Чтобы быстро извлечь только уровни логирования (LEVEL) для анализа частоты ошибок:
    cut -d' ' -f3 app.log | sort | uniq -c
    
    # Или извлечь только временные метки и сообщения:
    cut -d' ' -f1,4- app.log
    
  2. Проверка данных в CSV-отчетах:

    # Проверить значения в первых двух колонках тестового отчета:
    cut -d',' -f1,2 test_report.csv | head -20
    
  3. Подготовка тестовых данных:

    # Создать список пользователей из файла /etc/passwd для тестирования:
    cut -d':' -f1 /etc/passwd > user_list.txt
    
  4. Комбинирование с другими командами (конвейер, pipe |):

    # Извлечь PID процесса 'nginx' из вывода ps aux
    ps aux | grep nginx | grep -v grep | cut -d' ' -f2
    
    # Подсчитать уникальные статус-коды из лога веб-сервера (предположим, код в 9-й колонке)
    cut -d' ' -f9 access.log | sort | uniq -c
    

Ограничения и альтернативы

  • cut не подходит для сложных сценариев, где разделитель может быть экранирован или встретиться в самих данных (например, в кавычках). Для этого лучше использовать awk или специализированные инструменты вроде csvkit.
  • awk предоставляет гораздо более гибкие возможности для обработки колоночных данных, включая условные операции и встроенные функции.
    # Эквивалент cut -d':' -f1, но с возможностью добавить логику
    awk -F':' '{print $1}' /etc/passwd
    

Вывод для QA: В арсенале инженера по обеспечению качества cut — это быстрый и простой «скальпель» для рутинных операций с текстом. Он идеален для быстрого прототипирования проверок, извлечения фрагментов из логов или подготовки данных, когда важна скорость и одноразовость операции. Для более сложного парсинга, анализа или преобразования данных следует использовать awk, sed или языки программирования (Python).