Команда cut
Описание
Команда cut используется для извлечения определённых столбцов, символов или полей из каждой строки текстового файла или стандартного ввода. Это особенно полезно при обработке CSV-файлов, логов и других структурированных данных.
Синтаксис
cut [опции] [файл(ы)]
или
команда | cut [опции]
Примеры использования
1. Извлечь определённые символы
cut -c 1-5 файл.txt
Выведет первые 5 символов каждой строки.
2. Извлечь определённые столбцы по номеру
cut -c 3,5,7 файл.txt
Выведет символы на позициях 3, 5 и 7 в каждой строке.
3. Извлечь определённые поля с пользовательским разделителем
cut -d ',' -f 2,4 файл.csv
Использует запятую как разделитель и выводит второе и четвёртое поле каждой строки.
4. Извлечь имя пользователя из /etc/passwd
cut -d ':' -f 1 /etc/passwd
Выведет список всех пользователей системы.
5. Считать данные из stdin
echo "один,два,три" | cut -d ',' -f 2
Выведет:
два
Полезные опции
| Опция | Описание |
|---|---|
-b, --bytes=LIST |
Выбрать только указанные байты |
-c, --characters=LIST |
Выбрать только указанные символы |
-f, --fields=LIST |
Выбрать только указанные поля |
-d, --delimiter=DELIM |
Указать пользовательский разделитель (по умолчанию — табуляция) |
--complement |
Вывести всё, кроме указанных полей/символов |
-s, --only-delimited |
Не показывать строки без разделителя |
Примеры с опциями
1. Вывести все поля, кроме первого
cut -d ',' -f 1 --complement файл.csv
2. Вывести только те строки, где есть нужный разделитель
cut -d ',' -s -f 2 файл.csv
3. Вывести диапазон байтов
cut -b 1-10 файл.txt
Выведет первые 10 байт каждой строки.
Формат LIST
Вы можете указывать:
- Одиночное число: 3 → третий символ/поле
- Диапазон: 1-5 → от 1 до 5
- Открытый диапазон: 3- → от 3 до конца
- Несколько значений через запятую: 1,3,5
Полезные заметки
cutработает только с однобайтовыми кодировками, если вы работаете с UTF-8 — используйтеawk,sedили другие инструменты.- Часто комбинируется с
grep,sort,uniq,pasteи другими утилитами. - Эффективен для быстрого извлечения данных из CSV, TSV и системных файлов (
/etc/passwd,/etc/groupи др.).
Альтернативы
| Инструмент | Когда использовать |
|---|---|
awk |
Если нужно более гибко обрабатывать поля |
sed |
Для сложной манипуляции текстом |
csvcut (из csvkit) |
Для работы с CSV-файлами |
field |
Простая альтернатива cut в некоторых shell'ах |
perl / python |
Для сложной обработки текста и юникода |
Пример работы
-
Создайте тестовый файл
data.csv:bash echo -e "имя,возраст,город\nАлекс,25,Москва\nОльга,30,СПб" > data.csv -
Извлеките имена:
bash cut -d ',' -f 1 data.csvРезультат:имя Алекс Ольга -
Извлеките возраст и город:
bash cut -d ',' -f 2,3 data.csvРезультат:возраст,город 25,Москва 30,СПб