cut — вырезать колонки из строк
Команда cut вырезает из каждой строки колонки по разделителю (-d и -f) или символы по номерам позиций (-c).
Шпаргалка
7 команд Версия для печати-
cut -d: -f1 /etc/passwdпервая колонка, разделитель «:» -
cut -d: -f1,7 /etc/passwdколонки 1 и 7 -
cut -d, -f2- data.csvсо 2-й до конца строки -
cut -d' ' -f1 access.logпервое слово строки -
cut -c1-8 file.txtсимволы с 1-го по 8-й -
cut -f2 table.tsv2-я колонка, разделитель TAB -
cut -d: -f1,6 --output-delimiter=' ' /etc/passwd
Обзор
cut делит каждую строку на колонки по одному символу-разделителю и печатает те,
номера которых указаны в -f. Разделитель задаёт -d, без него — табуляция.
Колонки считаются с единицы:
Между выбранными колонками cut ставит тот же разделитель. Номера пишут списком
(1,3) и диапазоном (2-4, 3- — до конца строки). Вместо колонок можно резать
по позициям: -c — символы, -b — байты. В Ubuntu -c тоже считает байты: для
латиницы разницы нет, кириллицу он режет пополам.
cut понимает только одиночный разделитель. Два пробела подряд для него — пустая
колонка между ними. Текст, выровненный пробелами (вывод ps, df, uniq -c), режут
через awk '{print $2}' — см. sed и awk.
Ключи
7-f, -c и -b — три способа выбрать кусок строки; в одном вызове нужен ровно
один. Полный список — man cut.
| Ключ | Что делает | Пример |
|---|---|---|
-d --delimiter C |
Разделитель колонок — один символ; без ключа — табуляция. | cut -d: -f1 /etc/passwd |
-f --fields LIST |
Какие колонки печатать — 1,3 или 2-4 или 3-. | cut -d, -f2- data.csv |
-c --characters LIST |
Резать по позициям; в Ubuntu считает байты, как -b. | cut -c1-8 file.txt |
-s --only-delimited |
Пропускать строки, в которых нет разделителя. | cut -s -d= -f2 settings.conf |
--complement |
Печатать всё, кроме выбранных колонок. | cut -d: --complement -f2 /etc/passwd |
--output-delimiter STR |
Чем соединять колонки в выводе вместо разделителя ввода. | cut -d: -f1,7 --output-delimiter=' ' /etc/passwd |
-b --bytes LIST |
Резать по номерам байтов. | cut -b1-4 data.bin |
Ничего не найдено. Попробуй запрос короче.
Рецепты
5Адреса из журнала веб-сервера
Колонка из CSV
Если в значениях CSV встречаются запятые в кавычках, cut их не поймёт:
нужна программа, знающая формат.
Всё, кроме одной колонки
Пропустить строки без разделителя
Без -s строка без разделителя печатается целиком.
Неполадки
7Пустой вывод при разделителе-пробеле
Между словами больше одного пробела, и нужная колонка пустая. Схлопни пробелы
через tr -s ' ' перед cut или возьми колонку awk '{print $2}'.
cut печатает всю строку
В строке нет разделителя из -d, и cut выводит её как есть. Проверь
разделитель (: или ,, табуляция или пробел) или добавь -s, чтобы такие
строки пропускать.
cut: you must specify a list of bytes, characters, or fields
Не указано, что вырезать. Добавь -f с номерами колонок или -c с позициями.
cut: the delimiter must be a single character
После -d стоит больше одного символа. cut понимает один символ; для
разделителя из нескольких символов бери awk -F.
cut: fields are numbered from 1
Колонки нумеруются с единицы: первая — -f1, а не -f0.
cut: only one type of list may be specified
В одной команде и -f, и -c. Оставь один способ.
Русские буквы разрезаны пополам
cut -c в Ubuntu считает байты, как -b, а русская буква в UTF-8 занимает два
байта. Для текста не на латинице режь по колонкам (-d, -f) или через awk.
См. также
- sort — упорядочить вырезанную колонку.
- uniq — посчитать повторы в колонке.
- wc — сколько строк получилось.
- sed-awk — awk режет по любому числу пробелов и считает.
- redirection — как собрать команды в конвейер.
- text-tools — tr, paste, column и другие звенья конвейера.
Есть неточность? Сообщить об ошибке в статье