Команда 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,СПб