команда вставки: установка (несколько) разделителей

9

В Linux у меня есть следующая проблема с pastefrom (GNU coreutils) 8.13:

Попытка установить другой разделитель, отличный от значения по умолчанию (TAB), приводит либо к простой печати первого символа определенного разделителя, либо к его полному игнорированию.

Вопрос : Как определить (несколько) разделителей при использовании paste ?

Было бы просто использовать, например, abc-123 в качестве разделителя. Под «множественным» я имею в виду, например, 2 TABS вместо одного.


Шаблоны, включающие разделитель (и), которые я пробовал до сих пор, были

  • --delimiters="\delimiter"
  • --delimiters='\delimiter'
  • --delimiters=$"\delimiter"
  • --delimiters=$'\delimiter'

Все с одинаковым результатом: только первый символ принимается или полностью игнорируется. Я также пробовал короткую версию -d"\"и несколько экземпляров & ndahs; ничего.

Также:

  • --delimiters="\\" → Сообщение об ошибке

Что работает отлично, хотя и не то, что я хочу:

  • --delimiters="\n" → новая строка
  • --delimiters="\0" → ничего промежуточного
  • --delimiters="\t"TABпо умолчанию. Отлично.
erch
источник

Ответы:

17

Чтобы иметь abcпромежуточный файл file1 и file2, вы можете сделать:

paste -d abc file1 /dev/null /dev/null file2

Или:

paste -d abc file1 - - file2 < /dev/null

Если вы хотите две вкладки:

paste file1 /dev/null file2
Стефан Шазелас
источник
работает « использование /dev/nullдля создания двух столбцов при обработке текста » (кроме того: это общеизвестное знание, которое я пропустил до сих пор, и если нет: откуда вы
взяли
1
@ Chirp.NotLuke. /dev/nullпри чтении действует как пустой файл, так что вы вставляете file1и пустой файл, и пустой файл, file2 с разделителями, в свою очередь a, bи c. Подробности о том, как -dработает, находятся на pasteстранице руководства .
Стефан Шазелас
@ StéphaneChazelas вы также можете добавить в pr -mts'abc' file1 file2качестве альтернативы?
Sundeep
4

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

например

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...
X Тянь
источник
2

В системах BSD (не в Linux, насколько мне известно) есть lamутилита (как в «ламинате»), которая работает быстрее и короче, чем приведенное выше решение:

lam file1 -s delimiter file2
эмм
источник