Я хочу скопировать содержимое пяти файлов в один файл как есть. Я пытался сделать это с помощью cp для каждого файла. Но это перезаписывает содержимое, скопированное из предыдущего файла. Я тоже пробовал
paste -d "\n" 1.txt 0.txt
и это не сработало.
Я хочу, чтобы мой скрипт добавлял новую строку в конце каждого текстового файла.
например. Файлы 1.txt, 2.txt, 3.txt. Поместите содержимое 1,2,3 в 0.txt
Как мне это сделать ?
Ответы:
Вам нужна команда
cat
(сокращение от конкатенации) с перенаправлением оболочки (>
) в ваш выходной файлисточник
>>
для добавления одного файла в другой, где>
перезаписывает выходной файл с тем, что направлено в него. Что касается новой строки, есть ли новая строка в качестве первого символа в файле1.txt
? Вы можете узнать с помощьюod -c
и посмотреть, является ли первый символ\n
.{...}
для сопоставления имен файлов, так что, возможно, кавычки немного запутали ваш скрипт? Я всегда стараюсь работать с такими вещами, используя этоls
в оболочке. Когда я правильно понял команду, я просто вырезал и вставил ее в скрипт как есть. Вы также можете найти эту-x
опцию полезной в ваших скриптах - она будет отображать расширенные команды в скрипте перед выполнением.Другой вариант, для тех из вас, кто все еще натыкается на этот пост, как я, это использовать
find -exec
:В моем случае мне понадобился более надежный вариант, который просматривал бы несколько подкаталогов, поэтому я решил использовать
find
. Разбивая это:Посмотрите в текущем рабочем каталоге.
Интересуют только файлы, а не каталоги и т. Д.
Урезать результат, установленный по имени
Выполните команду cat для каждого результата. «+» означает, что
cat
создается только 1 экземпляр (thx @gniourf_gniourf)Как объяснено в других ответах, добавьте содержимое в конце выходного файла.
источник
*.txt
должен быть заключен в кавычки (в противном случае всяfind
команда, как написано, бесполезна). Другим недостатком является грубое заблуждение: выполняемая команда - нетcat >> 0.txt {}
, ноcat {}
. Ваша команда фактически эквивалентна{ find . -type f -name *.txt -exec cat '{}' \; ; } >> 0.txt
(я добавил группировку, чтобы вы поняли, что на самом деле происходит). Другим недостатком является то, чтоfind
он найдет файл0.txt
иcat
будет жаловаться, говоря, что входной файл является выходным файлом .>> output.file
в конце вашей команды, чтобы вы никого не побуждали (включая себя) думать, что ониfind
будут выполнятьсяcat {} >> output.file
для каждого найденного файла.-exec cat {} +
вместо-exec cat {} \;
, чтобы только один экземплярcat
создавался с несколькими аргументами (+
определяется POSIX ).find . -type f -exec cat {} + >> outputfile.txt
и не мог понять, почему мой выходной файл не перестал расти на концертах, даже если каталог был всего 50 мегабайт. Это потому, что я продолжал добавлять файл outputfile.txt к себе! Поэтому просто убедитесь, что этот файл назван правильно или полностью помещен в другой каталог, чтобы избежать этого.если у вас есть определенный тип вывода, то сделайте что-то вроде этого
источник
file_1
,file_2
, ...file_11
, из - за естественного порядка , как сортируют файлы.Если все ваши файлы находятся в одном каталоге, вы можете просто сделать
cat * > 0.txt
Файлы 1.txt, 2.txt, .. перейдут в 0.txt
источник
file_1
,file_2
, ...file_11
, из - за естественного порядка , как сортируют файлы.Я нашел эту страницу, потому что мне нужно было объединить 952 файла в один. Я нашел, что это работает намного лучше, если у вас много файлов. Это создаст цикл для сколь угодно большого числа чисел, и каждое из них будет следовать с помощью >> для добавления в конец 0.txt.
источник
Если все ваши файлы названы одинаково, вы можете просто сделать:
источник
Другой вариант
sed
:Или...
Или...
Или без перенаправления ...
Обратите внимание, что в последней строке также пишите
merge.txt
(неwmerge.txt
!). Вы можете использовать,w"merge.txt"
чтобы избежать путаницы с именем файла, и-n
для вывода без вывода сообщений.Конечно, вы также можете сократить список файлов с подстановочными знаками. Например, в случае нумерованных файлов, как в приведенных выше примерах, вы можете указать диапазон в фигурных скобках следующим образом:
источник
если ваши файлы содержат заголовки и вы хотите удалить их из выходного файла, вы можете использовать:
источник
Если исходный файл содержит непечатаемые символы, они будут потеряны при использовании команды cat. Используя 'cat -v', непечатаемые символы будут преобразованы в видимые строки символов, но выходной файл все равно не будет содержать фактические непечатные символы в исходном файле. При небольшом количестве файлов альтернативой может быть открытие первого файла в редакторе (например, vim), который обрабатывает непечатаемые символы. Затем перейдите в конец файла и введите «: r second_file_name». Это будет тянуть во втором файле, включая непечатные символы. То же самое можно сделать для дополнительных файлов. Когда все файлы будут прочитаны, введите «: w». Конечным результатом является то, что первый файл теперь будет содержать то, что он делал изначально, плюс содержимое файлов, которые были прочитаны.
источник
Если вы хотите добавить содержимое 3 файлов в один файл, то следующая команда будет хорошим выбором:
Он объединит содержимое всех файлов в file4, выдавая вывод консоли
/dev/null
.источник