Как добавить содержимое нескольких файлов в один файл
Я хочу, чтобы скопировать содержимое пяти файлов в один файл, как это. Я попытался сделать это с помощью 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.
другой вариант: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
.