Ответ 1
Вам нужна команда cat
(short для concatenate) с перенаправлением оболочки (>
) в ваш выходной файл
cat 1.txt 2.txt 3.txt > 0.txt
Я хочу скопировать содержимое пяти файлов в один файл как есть. Я попытался сделать это, используя cp для каждого файла. Но это перезаписывает содержимое, скопированное из предыдущего файла. Я также пробовал
paste -d "\n" 1.txt 0.txt
и это не сработало.
Я хочу, чтобы мой script добавлял новую строку в конце каждого текстового файла.
например. Файлы 1.txt, 2.txt, 3.txt. Поместите содержимое 1,2,3 в 0.txt
Как мне это сделать?
Вам нужна команда cat
(short для 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'
Убейте результирующий набор по имени
-exec cat {} +
Выполните команду cat для каждого результата. "+" означает, что генерируется только один экземпляр cat
(спасибо @gniourf_gniourf)
>> output.file
Как объяснено в других ответах, добавьте содержимое с концами в конец выходного файла.
если у вас есть определенный тип вывода, тогда сделайте что-то вроде этого
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 файла вместе. Я нашел, что это работает намного лучше, если у вас много файлов. Это сделает цикл для сколько угодно чисел и кота, каждый из которых использует → для добавления в конец 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
Если исходный файл содержит непечатаемые символы, они будут потеряны при использовании команды cat. Используя "cat -v", непечатные будут преобразованы в видимые строки символов, но выходной файл все равно не будет содержать фактические символы непечатаемых в исходном файле. С небольшим количеством файлов альтернативой может быть открытие первого файла в редакторе (например, vim), который обрабатывает непечатаемые символы. Затем маневрируйте в нижней части файла и введите ": r second_file_name". Это приведет к второму файлу, включая непечатаемые символы. То же самое можно сделать и для дополнительных файлов. Когда все файлы были прочитаны, введите ": w". Конечным результатом является то, что первый файл теперь будет содержать то, что он сделал первоначально, плюс содержимое файлов, которые были прочитаны.
если ваши файлы содержат заголовки, и вы хотите удалить их в выходной файл, вы можете использовать:
for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
Если все ваши файлы называются аналогично, вы можете просто сделать:
cat *.log >> output.log
Если вы хотите добавить содержимое трех файлов в один файл, то следующая команда будет хорошим выбором:
cat file1 file2 file3 | tee -a file4 > /dev/null
Он объединит содержимое всех файлов в файл4, выбросив содержимое консоли в /dev/null
.