Есть ли способ иметь команду
cat *tab > newfile.tab
вставьте Пустую строку между каждым файлом, который она объединяет?
Рычаги a for
конструкция:
GLOBIGNORE=newfile.tab
for f in *tab; do cat "$f"; echo; done >newfile.tab
Расширенный:
GLOBIGNORE=newfile.tab
for f in *tab; do
cat "$f"; echo
done >newfile.tab
GLOBIGNORE=newfile.tab
для исключения newfile.tab
от оболочки globbing, поскольку это - наш выходной файл
for f in *tab
выполняет итерации по файлам, заканчивающимся в tab
cat "$f"
выходное содержание файла
echo
добавляет новая строка
Дескриптор файла от >newfile.tab
перенаправление сохранено открытым на время for
т.е. файл newfile.tab
открыт - закрытый однажды
Кроме того, можно использовать printf
сделать форматирование однажды:
for f in file.txt*; do printf '%s\n\n' "$(<"$f")"; done
Расширенный:
for f in file.txt*; do
printf '%s\n\n' "$(<"$f")"
done
Если Вы не возражаете против дополнительной пустой строки после последнего файла, Вы могли бы использовать sed
, например,
sed -s '$G' *.tab > newfile.tab
(это использует GNU sed расширение -s
, который рассматривает входные файлы отдельно; следовательно $G
двойные интервалы последняя строка каждого файла).
при возражении против дополнительной строки Вы могли бы передать ее по каналу через другой sed
:
sed -s '$G' *.tab | sed '$d' > newfile.tab
<час> , С другой стороны, с awk
awk 'FNR == 1 && NR != 1 {print ""} 1' *.tab > newfile.tab