Изучаем команды Linux: paste

Источник: rus-linux
А. Кривошей

1. Введение

paste - одна из наименее известных команд в GNU/Linux (или других Unix-системах), но люди, занимающиеся написанием скриптов оболочки для синтаксического анализа текста, знают о ней и могут подтвердить ее полезность. Это очень простая команда, всего с двумя опциями, использующаяся для вывода бок о бок строк из двух и более файлов. В связи с простотой команды на этот раз не будет таблицы с примерами использования.

2. Использование paste

Представьте, что у вас есть конфигурационный файл, например .cvsrc, а также более поздняя версия этого файла, скажем .cvsrc.new. Для того, чтобы решить, нужно ли заменять старый файл новым, необходимо наглядно отобразить различия между ними. Под рукой всегда есть команда diff(1), но вы просто хотите просмотреть строки бок о бок, без дополнительных примечаний. По умолчанию paste использует в качестве разделителя TAB, поэтому строки из первого файла (.cvsrc) будут отделены от строк из второго файла (.cvsrc.new). Пример:

$ echo .cvsrc > .cvsrc
$ echo .cvsrc.new > .cvsrc.new
$ cat .cvsrc .cvsrc.new 
.cvsrc
.cvsrc.new
$ paste .cvsrc .cvsrc.new 
.cvsrc  .cvsrc.new

В случае если вам необходимо изменить разделитель, используйте опцию -d и задайте разделитель вручную. В примере ниже мы использовали в качестве разделителя ":":

$ paste .cvsrc .cvsrc.new 
.cvsrc  .cvsrc.new
$ paste -d : .cvsrc .cvsrc.new 
.cvsrc:.cvsrc.new

Если вы хотите пронумеровать строки, используйте nl(1)

$ paste -d : .cvsrc .cvsrc.new / nl
     1  .cvsrc:.cvsrc.new

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

2.1. Опции paste

  • --help - стандартная для утилит Linux опция, не нуждается в пояснениях
  • --version - тоже стандарт
  • -d, --delimiters=... - сменить разделитель TAB на другой (список)
  • -s, --serial - вместо того, чтобы выводить строки из файлов рядом друг с другом, они выводятся последовательно.
  • Если не указано имя файла или вместо него стоит '-', используется stdin.


    Страница сайта http://test.interface.ru
    Оригинал находится по адресу http://test.interface.ru/home.asp?artId=31054