Команда cut выбирает указанные позиции символов или поля из каждой входной строки. Она лучше всего подходит для текста с устойчивой структурой, известными разделителями и позициями полей.
Text-Fu · Урок 6
cut
Научитесь выбирать позиции символов или разделённые поля из каждой строки с помощью cut.
Создайте небольшой файл с полями, разделёнными табуляцией. printf интерпретирует \t как символ табуляции, а \n — как перевод строки:
$ printf 'name\trole\nalice\tadmin\nbob\tviewer\n' > team.tsv
Выбор позиций символов
Используйте -c LIST, чтобы выбрать позиции в каждой строке. Нумерация начинается с 1:
$ cut -c 1 team.tsv
n
a
b
Список может содержать отдельные позиции и диапазоны:
$ cut -c 1-4 team.tsv
name
alic
bob
$ cut -c 1,3 team.tsv
nm
ai
bb
Пробелы, табуляции и знаки препинания тоже занимают позиции. cut обрабатывает каждую строку независимо.
Какая команда выводит первый символ каждой строки names.txt?
Выбор полей, разделённых табуляцией
Используйте -f LIST для выбора полей. По умолчанию разделителем является табуляция:
$ cut -f 2 team.tsv
role
admin
viewer
Как и при выборе символов, список может содержать значения вроде 1, 1,3, 2-4, -3 или 2-.
Какая команда выводит второе поле каждой строки team.tsv, разделённое табуляцией?
Выбор собственного разделителя
Используйте -d CHARACTER вместе с -f, если поля разделены не табуляцией. В следующем примере создаются данные с точкой с запятой:
$ printf 'alice;admin\nbob;viewer\n' > team.txt
$ cut -d ';' -f 1 team.txt
alice
bob
В этой форме разделитель состоит из одного символа. Заключите ; в кавычки, поскольку без кавычек точка с запятой имеет управляющее значение для оболочки.
Какая команда выводит второе поле team.txt, разделённое точкой с запятой?
Обработка строк без разделителя
В режиме полей cut обычно выводит строку без изменений, если в ней нет разделителя. Добавьте -s, чтобы подавить такие строки:
$ printf 'alice;admin\nheader\nbob;viewer\n' | cut -s -d ';' -f 2
admin
viewer
Это не обеспечивает проверку произвольного CSV-файла. CSV может содержать разделители в кавычках, встроенные переводы строк и правила экранирования, которых простое разбиение по одному символу не понимает; для таких данных используйте инструмент с поддержкой CSV.
Что делает -s в cut -d ':' -f 1?
Чтение из stdin
Если файл не указан либо в качестве входного операнда используется -, cut читает stdin. Поэтому команда естественно работает как этап конвейера:
$ printf 'red:1\nblue:2\n' | cut -d ':' -f 1
red
blue
Откуда cut читает ввод в generate-data | cut -d ':' -f 1?
Чтобы попрактиковаться в выборе позиций и полей, выполните лабораторные работы:
- Команда cut в Linux: вырезание текста — попрактикуйтесь извлекать отдельные столбцы и поля из текстовых файлов с помощью
cut. - Управление последовательностью и конвейеры — научитесь управлять последовательностями команд, использовать конвейеры и инструменты
cut,grep,wc,sortиuniq.
Урок завершён
Вы завершили cut
Теперь вы можете выбирать предсказуемые позиции из построчно организованного текста с помощью cut.
Выбирайте отдельные позиции символов и диапазоны.
Извлекайте поля с разделителем-табуляцией с помощью
-f.Задавайте односимвольный разделитель параметром
-d.При необходимости подавляйте строки без разделителя.
Читайте структурированный текст из файлов или stdin.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт