Как объединить несколько текстовых файлов с пустой строкой между ними? [дубликат]

0
10.10.2018, 20:11
4 ответа

Вы можете сделать все это с помощью одного использования cat, который, хотя он часто используется для отображения содержимого файла на терминале, на самом деле предназначен для con-cat -. ] загрузка файлов (i. е. соединяя их вместе):

$ cat hello.html hello1.html hello2.html | mail -s "Subject Goes Here" myself@mailhost.example.com
0
28.01.2020, 02:31

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

>Final.html
cat hello.html >> Final.html
echo >> Final.html
cat hello1.html >> Final.html
echo >> Final.html
cat hello2.html >> Final.html

В следующем примере используется скобка, чтобы уменьшить объем кода.

{
     cat hello.html
     echo
     cat hello1.html
     echo
     cat hello2.html 
}> Final.html
0
28.01.2020, 02:31

Это должно дать требуемый результат,

awk 'NR>1 && FNR==1{print ""};1'./*.html > /path/to/Final.html

(убедитесь, что выходной файл отсутствует в списке входных файлов)

3
28.01.2020, 02:31

Использование GNU awk(, который поддерживает специальный шаблон ENDFILE):

awk '1; ENDFILE { print "" }' hello.html hello1.html hello2.html >Final.html

Скрипт awkпередает немодифицированные данные каждого файла по очереди (1;может быть заменен на { print }, что делает то же самое ). В конце каждого файла блок ENDFILEвыводит пустую строку.

Дополнительно вставить имя файла перед данными каждого файла (это не входило в вопрос):

awk 'BEGINFILE { print FILENAME } 1
     ENDFILE   { print "" }' hello.html hello1.html hello2.html >Final.html

Специальный шаблон BEGINFILEработает так же, как ENDFILE, но срабатывает перед чтением первой строки нового файла. Переменная FILENAMEявляется стандартной переменной awkи содержит путь к текущему входному файлу.

0
28.01.2020, 02:31

Теги

Похожие вопросы