Присоединить несколько файлов с двумя пустыми строками?

Я пытаюсь присоединиться к файлам Markdown с двумя символами новой строки между каждым файлом.

Я пробовал использовать следующую команду:

paste -sd '\n\n' file1.md file2.md 

Это связано с файлами с новой строкой, но не с двумя новыми строками, как мне нужно.

Какую команду я могу использовать для объединения произвольного количества файлов с двумя символами \n между каждым соединением?

6 Solutions collect form web for “Присоединить несколько файлов с двумя пустыми строками?”

С paste :

 :|paste -sd'\n' file1.md - - file2.md 

С awk вы можете обрабатывать несколько файлов и печатать разделитель перед каждым файлом ( FNR==1 ), за исключением первого ( NR>1 ). Так

 awk '(NR>1 && FNR==1){printf ("\n\n")};1' file1.md file2.md ... fileN.md 

объединяет файлы, добавляя указанный разделитель между ними.


Если вы не возражаете против конечного разделителя в конечном результате, в этом конкретном случае (разделитель представляет собой несколько пустых строк), вы также можете сделать (с gnu sed ):

 sed -s '${G;G}' file1.md file2.md ... fileN.md 
 printf '\n\n' | cat file1.md - file2.md 

Я думаю, что-то вроде cuonglm. Стремясь к этому, так или иначе.

В дополнение к ответу cuonglm:

 :|paste -sd'\n' $(sed $"s/\s/ - - /g" <<< $(ls -1|paste -sd" " -)) 

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

Что тут происходит?

 : 

Это истинная функция в bash. Это в основном используется для no-ops, поскольку оно возвращает true.

 | 

Это труба, которая выводит результат левой команды и передает ее на вход правой команды.

 $(sed $"s/\s/ - - /g" <<< $(ls -1|paste -sd" " -)) 

Это просто строит линию, которая необходима для вставки. Это будет выглядеть примерно так:

 file1 - - file2 - - file3 - - file4 ... 

Поэтому, когда вызывается паста, она будет записывать все строки из перечисленных файлов в стандартный вывод. Когда файл не найден или не называет «-», паста считывает со стандартного ввода и получает значение TRUE из: который передается в пасту.

Обычно каждый файл добавляется оператором табуляции после того, как он был записан в stdout. с аргументом -d "\ n" для вставки вкладка обменивается с новой строкой.

Итак, теперь вставьте записи, разделенные символами новой строки, на stdout, и когда паста находит «-», она принимает истину и записывает только разделитель в stdout – новую строку.

Не лучшее решение, но работает для вашего дела:

 echo -e `cat file1.md`"\n\n"`cat file2.md` 

С новым GNU awk :

 awk '1; ENDFILE {print "\n"}' files... 
Linux и Unix - лучшая ОС в мире.