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

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

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

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

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

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

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

10 ответов


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

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

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

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

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

find .

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

-type f

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

-name '*.txt'

Whittle вниз результирующий набор имя

-exec cat {} +

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

 >> output.file

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


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

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

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

cat * > 0.txt

файлы 1.txt, 2.формат txt. ,. уйдет в 0.txt


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

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


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

cat *.log >> output.log

другой вариант: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

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

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

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


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

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

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