paste
100%

Text-Fu · Урок 7

paste

Научитесь объединять соответствующие строки или сериализовать их с настраиваемыми разделителями с помощью paste.

Команда paste объединяет строки в столбцы. По умолчанию она берёт по одной строке из каждого входного файла, соединяет их табуляцией и повторяет это, пока не будет достигнут конец всех файлов.

Объединение файлов бок о бок

Создайте два небольших файла:

$ printf 'alice\nbob\n' > names.txt
$ printf 'admin\nviewer\n' > roles.txt

Передайте оба файла команде paste:

$ paste names.txt roles.txt
alice	admin
bob	viewer

Видимый промежуток между столбцами является табуляцией. В отличие от cat, которая записывает один полный файл за другим, paste объединяет соответствующие входные строки.

first.txt содержит A, затем B, а second.txt1, затем 2. Что по умолчанию выведет paste first.txt second.txt?

Выбор разделителя

Используйте -d LIST, чтобы заменить стандартную табуляцию. Например, двоеточием:

$ paste -d ':' names.txt roles.txt
alice:admin
bob:viewer

Заключайте в кавычки разделители, имеющие особое значение для оболочки. Если список содержит несколько символов, paste может циклически использовать их, но при построении двух столбцов проще всего применять один символ.

Какая команда объединяет соответствующие строки names.txt и roles.txt двоеточием?

Сериализация строк одного файла

Параметр -s обрабатывает каждый входной файл последовательно, объединяя его строки в одну выходную строку. Создайте файл с одним словом в строке:

$ printf 'The\nquick\nbrown\nfox\n' > words.txt
$ paste -s words.txt
The	quick	brown	fox

Объедините -s с -d, чтобы выбрать разделитель:

$ paste -s -d ' ' words.txt
The quick brown fox

Если с -s указано несколько файлов, каждый файл превращается в отдельную выходную строку.

Какая команда объединяет все строки words.txt в одну строку, разделяя их пробелами?

Файлы разной длины

Если в параллельном режиме входные файлы содержат разное число строк, paste продолжает работу до конца самого длинного. Отсутствующие значения более короткого файла становятся пустыми полями:

$ printf 'A\nB\nC\n' > letters.txt
$ printf '1\n2\n' > numbers.txt
$ paste -d ':' letters.txt numbers.txt
A:1
B:2
C:

Что происходит, когда один файл в параллельной команде paste заканчивается раньше другого?

Чтение одного ввода из stdin

Используйте - как файловый операнд, чтобы читать в этой позиции из stdin:

$ printf 'admin\nviewer\n' | paste -d ':' names.txt -
alice:admin
bob:viewer

Что означает операнд - в producer | paste names.txt -?

Чтобы попрактиковаться в объединении построчных данных, выполните лабораторную работу:

  1. Простая обработка текста — научитесь эффективно изменять и анализировать текст командами tr, col, join и paste.

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

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

Теперь вы можете объединять построчные входные данные с предсказуемым выравниванием и разделителями.

  • Объединяйте соответствующие строки нескольких файлов.

  • Заменяйте стандартную табуляцию параметром -d.

  • Сериализуйте строки одного файла с помощью -s.

  • Учитывайте пустые поля в более коротких входных файлах.

  • Используйте -, когда один источник поступает через stdin.

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

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

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