cut
100%

Text-Fu · Урок 6

cut

Научитесь выбирать позиции символов или разделённые поля из каждой строки с помощью 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?

Чтобы попрактиковаться в выборе позиций и полей, выполните лабораторные работы:

  1. Команда cut в Linux: вырезание текста — попрактикуйтесь извлекать отдельные столбцы и поля из текстовых файлов с помощью cut.
  2. Управление последовательностью и конвейеры — научитесь управлять последовательностями команд, использовать конвейеры и инструменты cut, grep, wc, sort и uniq.

Урок завершён

Вы завершили cut

Теперь вы можете выбирать предсказуемые позиции из построчно организованного текста с помощью cut.

  • Выбирайте отдельные позиции символов и диапазоны.

  • Извлекайте поля с разделителем-табуляцией с помощью -f.

  • Задавайте односимвольный разделитель параметром -d.

  • При необходимости подавляйте строки без разделителя.

  • Читайте структурированный текст из файлов или stdin.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Следующий Урок
Назад к Text-Fu