paste — слияние строк из файлов

Команда paste выполняет операцию, обратную команде cut. Вместо извлечения колонок текста из файла она добавляет одну или несколько колонок текста в файл. Для этого она читает содержимое нескольких файлов, комбинирует поля, найденные в них, и выводит результат в стандартный вывод. Подобно программе cut, paste принимает несколько файлов в аргументах и/или данные со стандартного ввода. Для демонстрации возможностей программы paste выполним небольшую хирургическую операцию с файлом distros.txt, чтобы получить список выпусков в хронологическом порядке.

Сначала применим команду sort, чтобы получить список дистрибутивов, отсор­тированный по дате выпуска, и сохраним результат в файле distros-by-date.txt:

[me@linuxbox ~]$ sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt > distros-bydate.txt

Затем с помощью cut извлечем два первых поля (с именами дистрибутивов и номерами версий) и сохраним результат в файле distro-versions.txt:

[me@linuxbox ~]$ cut -f 1,2 distros-by-date.txt > distros-versions.txt

[me@linuxbox ~]$ head distros-versions.txt

Fedora 10

Ubuntu 8.10

SUSE 11.0

Fedora 9

Ubuntu 8.04

Fedora 8

Ubuntu 7.10

SUSE 10.3

Fedora 7

Ubuntu 7.04

В заключение этапа подготовки извлечем даты выпусков и сохраним их в файле distro-dates.txt:

[me@linuxbox ~]$ cut -f 3 distros-by-date.txt > distros-dates.txt

[me@linuxbox ~]$ head distros-dates.txt

11/25/2008

10/30/2008

06/19/2008

05/13/2008

04/24/2008

11/08/2007

10/18/2007

10/04/2007

05/31/2007

04/19/2007

Теперь у нас есть все необходимое. Чтобы завершить процедуру, с помощью paste добавим колонку с датами перед названиями и номерами версий дистрибутивов, создав хронологический список. Для этого достаточно просто вызвать paste и передать ей файлы в требуемом порядке.

[me@linuxbox ~]$ paste distros-dates.txt distros-versions.txt

11/25/2008 Fedora 10

10/30/2008 Ubuntu 8.10

06/19/2008 SUSE 11.0

05/13/2008 Fedora 9

04/24/2008 Ubuntu 8.04

11/08/2007 Fedora 8

10/18/2007 Ubuntu 7.10

10/04/2007 SUSE 10.3

05/31/2007 Fedora 7

04/19/2007 Ubuntu 7.04

12/07/2006 SUSE 10.2

10/26/2006 Ubuntu 6.10

10/24/2006 Fedora 6

06/01/2006 Ubuntu 6.06

05/11/2006 SUSE 10.1

03/20/2006 Fedora 5