Есть ли способ, чтобы команда
cat *tab > newfile.tab
вставляла пустую строку между каждым скомпилированным файлом?
Использовать конструкцию for:
GLOBIGNORE=newfile.tab
for f in *tab; do cat "$f"; echo; done >newfile.tab
Expanded:
GLOBIGNORE=newfile.tab
for f in *tab; do
cat "$f"; echo
done >newfile.tab
GLOBIGNORE=newfile.tab - исключить newfile.tab из shell globbing, так как это наш выходной файл for f in *tab повторяет файлы, заканчивающиеся на tab cat "$f" выводит содержимое файла echo добавляет новую строку. Дескриптор файла из перенаправления >newfile.tab остается открытым на время for, т.е. открывается файл newfile.tab -closed once Кроме того, вы можете использовать printf для форматирования один раз:
for f in file.txt*; do printf '%s\n\n' "$(<"$f")"; done
Expanded:
for f in file.txt*; do
printf '%s\n\n' "$(<"$f")"
done
Использовать конструкцию for:
GLOBIGNORE=newfile.tab
for f in *tab; do cat "$f"; echo; done >newfile.tab
Expanded:
GLOBIGNORE=newfile.tab
for f in *tab; do
cat "$f"; echo
done >newfile.tab
GLOBIGNORE=newfile.tab - исключить newfile.tab из shell globbing, так как это наш выходной файл for f in *tab повторяет файлы, заканчивающиеся на tab cat "$f" выводит содержимое файла echo добавляет новую строку. Дескриптор файла из перенаправления >newfile.tab остается открытым на время for, т.е. открывается файл newfile.tab -closed once Кроме того, вы можете использовать printf для форматирования один раз:
for f in file.txt*; do printf '%s\n\n' "$(<"$f")"; done
Expanded:
for f in file.txt*; do
printf '%s\n\n' "$(<"$f")"
done
Использовать конструкцию for:
GLOBIGNORE=newfile.tab
for f in *tab; do cat "$f"; echo; done >newfile.tab
Expanded:
GLOBIGNORE=newfile.tab
for f in *tab; do
cat "$f"; echo
done >newfile.tab
GLOBIGNORE=newfile.tab - исключить newfile.tab из shell globbing, так как это наш выходной файл for f in *tab повторяет файлы, заканчивающиеся на tab cat "$f" выводит содержимое файла echo добавляет новую строку. Дескриптор файла из перенаправления >newfile.tab остается открытым на время for, т.е. открывается файл newfile.tab -closed once Кроме того, вы можете использовать printf для форматирования один раз:
for f in file.txt*; do printf '%s\n\n' "$(<"$f")"; done
Expanded:
for f in file.txt*; do
printf '%s\n\n' "$(<"$f")"
done
Использовать конструкцию for:
GLOBIGNORE=newfile.tab
for f in *tab; do cat "$f"; echo; done >newfile.tab
Expanded:
GLOBIGNORE=newfile.tab
for f in *tab; do
cat "$f"; echo
done >newfile.tab
GLOBIGNORE=newfile.tab - исключить newfile.tab из shell globbing, так как это наш выходной файл for f in *tab повторяет файлы, заканчивающиеся на tab cat "$f" выводит содержимое файла echo добавляет новую строку. Дескриптор файла из перенаправления >newfile.tab остается открытым на время for, т.е. открывается файл newfile.tab -closed once Кроме того, вы можете использовать printf для форматирования один раз:
for f in file.txt*; do printf '%s\n\n' "$(<"$f")"; done
Expanded:
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
Если вы не возражаете против дополнительной пустой строки после последнего файла, вы можете использовать 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
Если вы не возражаете против дополнительной пустой строки после последнего файла, вы можете использовать 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
Если вы не возражаете против дополнительной пустой строки после последнего файла, вы можете использовать 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