вставлять файлы без разделителя

8

Как соединить два файла по вертикали без разделителя? Я пытался использовать paste -d"" a b, но это только дает мне a.

Образец файла:

000    0   0   0
0001000200030004
  10  20  30  40
    2000    4000
            .123
            12.1
1234234534564567
Томас Грайф
источник
1
Вы уверены, что это то, что вы получаете? paste - d"" a bвставит содержимое из stdin, файл с именем d"", a, b.
Cuonglm
@cuonglm опечатка ... исправлено.
Томас Грейф,
Вы были с одним символом: paste -d "" a b.
G-Man говорит: «Восстановите Монику»

Ответы:

14

pasteиспользуйте \0для нулевого разделителя, как определено POSIX :

paste -d'\0' file1 file2

Использование -d"" a bаналогично -d a b: pasteпрограмма видит три аргумента -d, aи b, который создает aразделитель и bимя единственного файла для вставки.

Если вы работаете в системе GNU (не встроенный Linux, Cygwin,…), вы можете использовать:

paste -d "" file1 file2

Форма -d ""не указана POSIX и может вызывать ошибки на других платформах. По крайней мере, BSD и семейная реликвия pasteсообщат об ошибке без разделителей .

cuonglm
источник
3
Будьте осторожны, пытаясь извлечь что-то из поведения так называемых «фамильных инструментов». pasteЭтот набор был написан Гуннаром Риттером и не связан с источниками UNIX. Оболочка Bourne из этого набора была взята из оболочки OpenSolaris Bourne, но имеет свои собственные ошибки в результате быстрого и хакерского переноса на недостатки в Linux ( например, несовместимая реализация wait (), проверьте, (exec ps)чтобы убедиться, что зависание отсутствует в оригинале и отсутствует в моем переносном Bourne Shell.
Щил
Кстати: вставка в Solaris до ~ апреля 2010 г. выдает ошибку «без разделителя», paste -d '' file1 file2но с тех пор вставка является реализацией вставки, взятой у Дэвида Корна, и это разрешает -d «».
Щил
@schily: Что вы имеете в виду "получить"? Я упоминаю семейную реликвию, pasteпотому что она у меня была, и я могу проверить ее, я не использую ее для «стандарта» или чего-то еще.
Cuonglm
@schily: А также я тестировал с Solaris 11 , он тоже неpaste дал ошибку разделителей для paste -d "".
cuonglm
Многие люди считают, что инструменты с маркой "семейная реликвия" взяты из оригинальных источников UNIX, а паста семейной реликвии - нет.
Щил