команда вставити: встановлення (декількох) роздільників


9

У Linux у мене є така проблема з paste(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, за замовчуванням. Чудово.

Відповіді:


17

Щоб мати abcміж файлом1 та 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і порожній файл, і порожній файл, файл2 з роздільниками, у свою чергу a, bі c. Детальніше про те, як -dпрацюють на pasteсторінці "man".
Стефан Шазелас

@ 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 ...
...

2

У системах BSD lam(наскільки мені не відомо Linux) є утиліта (як у «ламінаті»), яка швидше і коротше, ніж вищевказане рішення:

lam file1 -s delimiter file2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.