Вы можете сделать все это с помощью одного использования cat
, который, хотя он часто используется для отображения содержимого файла на терминале, на самом деле предназначен для con-cat -. ] загрузка файлов (i. е. соединяя их вместе):
$ cat hello.html hello1.html hello2.html | mail -s "Subject Goes Here" myself@mailhost.example.com
Этого достаточно, я добавил код для добавления пустых строк. 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
Это должно дать требуемый результат,
awk 'NR>1 && FNR==1{print ""};1'./*.html > /path/to/Final.html
(убедитесь, что выходной файл отсутствует в списке входных файлов)
Использование 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
и содержит путь к текущему входному файлу.