Как добавить содержимое нескольких файлов в один файл

Я хочу скопировать содержимое пяти файлов в один файл как есть. Я попытался сделать это, используя cp для каждого файла. Но это перезаписывает содержимое, скопированное из предыдущего файла. Я также пробовал

paste -d "\n" 1.txt 0.txt

и это не сработало.

Я хочу, чтобы мой script добавлял новую строку в конце каждого текстового файла.

например. Файлы 1.txt, 2.txt, 3.txt. Поместите содержимое 1,2,3 в 0.txt

Как мне это сделать?

Ответ 1

Вам нужна команда cat (short для concatenate) с перенаправлением оболочки (>) в ваш выходной файл

cat 1.txt 2.txt 3.txt > 0.txt

Ответ 2

Другой вариант, для тех из вас, кто все еще наткнется на этот пост, как я, это использовать find -exec:

find . -type f -name '*.txt' -exec cat {} + >> output.file

В моем случае мне понадобился более надежный вариант, который просматривал бы несколько подкаталогов, поэтому я решил использовать find. Разрушение:

find .

Просмотрите текущий рабочий каталог.

-type f

Интересует только файлы, а не каталоги и т.д.

-name '*.txt'

Убейте результирующий набор по имени

-exec cat {} +

Выполните команду cat для каждого результата. "+" означает, что генерируется только один экземпляр cat (спасибо @gniourf_gniourf)

 >> output.file

Как объяснено в других ответах, добавьте содержимое с концами в конец выходного файла.

Ответ 3

если у вас есть определенный тип вывода, тогда сделайте что-то вроде этого

cat /path/to/files/*.txt >> finalout.txt

Ответ 4

Если все ваши файлы находятся в одном каталоге, вы можете просто сделать

cat * > 0.txt

Файлы 1.txt, 2.txt,.. войдут в 0.txt

Ответ 5

for i in {1..3}; do cat "$i.txt" >> 0.txt; done

Я нашел эту страницу, потому что мне нужно было объединить 952 файла вместе. Я нашел, что это работает намного лучше, если у вас много файлов. Это сделает цикл для сколько угодно чисел и кота, каждый из которых использует → для добавления в конец 0.txt.

Ответ 6

Другой вариант: sed:

sed r 1.txt 2.txt 3.txt > merge.txt 

Или...

sed h 1.txt 2.txt 3.txt > merge.txt 

Или...

sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here

Или без перенаправления...

sed wmerge.txt 1.txt 2.txt 3.txt

Обратите внимание, что последняя строка также записывает merge.txt (не wmerge.txt!). Вы можете использовать w"merge.txt", чтобы избежать путаницы с именем файла, и -n для вывода без вывода звука.

Конечно, вы также можете сократить список файлов с помощью подстановочных знаков. Например, в случае пронумерованных файлов, как в приведенных выше примерах, вы можете указать диапазон с фигурными скобками следующим образом:

sed -n w"merge.txt" {1..3}.txt

Ответ 7

Если исходный файл содержит непечатаемые символы, они будут потеряны при использовании команды cat. Используя "cat -v", непечатные будут преобразованы в видимые строки символов, но выходной файл все равно не будет содержать фактические символы непечатаемых в исходном файле. С небольшим количеством файлов альтернативой может быть открытие первого файла в редакторе (например, vim), который обрабатывает непечатаемые символы. Затем маневрируйте в нижней части файла и введите ": r second_file_name". Это приведет к второму файлу, включая непечатаемые символы. То же самое можно сделать и для дополнительных файлов. Когда все файлы были прочитаны, введите ": w". Конечным результатом является то, что первый файл теперь будет содержать то, что он сделал первоначально, плюс содержимое файлов, которые были прочитаны.

Ответ 8

если ваши файлы содержат заголовки, и вы хотите удалить их в выходной файл, вы можете использовать:

for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done

Ответ 9

Если все ваши файлы называются аналогично, вы можете просто сделать:

cat *.log >> output.log

Ответ 10

Если вы хотите добавить содержимое трех файлов в один файл, то следующая команда будет хорошим выбором:

cat file1 file2 file3 | tee -a file4 > /dev/null

Он объединит содержимое всех файлов в файл4, выбросив содержимое консоли в /dev/null.