Склеить два файла linux

unixforum.org

понадобилось склеить два файла по строчно. Как это сделать на (shell+ (sed or awk) пока придумать не могу. Я призняться не силен в программировании, Если не сложно подскажитте как написать.

Re: склеить два файла

Сообщение Pavel Ghost » 14.01.2007 22:19

Смотря каких файлов — текстовых или двоичных.

Для первых — самый простой вариант:
cat file1.txt file2.txt > result_file.txt

elide Бывший модератор Сообщения: 2421 Статус: Übermensch ОС: лялих

Re: склеить два файла

Сообщение elide » 14.01.2007 22:33

BaBL Сообщения: 767 ОС: Debian GNU/Linux SID Контактная информация:

Re: склеить два файла

Сообщение BaBL » 15.01.2007 01:46

ну здесь больше не «текстовый» и «двоичный», а вообще по типам файлов. К примеру wav и mp3 катом тоже склеиваются, а вот два жпега в удвоенный жпег не превратятся.

Re: склеить два файла

Сообщение Mellon » 15.01.2007 03:22

Так, и я задам похожий вопрос (порсто интересно).
Как быстро склеивать БОЛЬШИЕ файлы ( <4Gb)?
Подробней.
Как известно, файл на диске может лежать не одним куском, а в разброс. То есть, в принципе, можно склеить файлы не читая их. Как это сделать?

Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
———————
Переворачиватель пингвинов

Re: склеить два файла

Сообщение d_n_k » 15.01.2007 10:53

Как известно, файл на диске может лежать не одним куском, а в разброс. То есть, в принципе, можно склеить файлы не читая их. Как это сделать?

хочешь менять структуру файловой системы?

тогда читай маны по утилитам к твоей файловой системе.

Re: склеить два файла

Сообщение susik » 15.01.2007 14:50

Смотря каких файлов — текстовых или двоичных.

Для первых — самый простой вариант:
cat file1.txt file2.txt > result_file.txt

Спасибо что откликнулись, файлы текстовые, но этот вариант к сожелению не подойдет, так как склеить необходимо таким образом (в строку из первого файла пишется первая строка из втрого файла, в вторую строку из первого файла пишется вторая строка из второго файла и т.д.)

elide Бывший модератор Сообщения: 2421 Статус: Übermensch ОС: лялих

Re: склеить два файла

Сообщение elide » 15.01.2007 18:29

susik
приведи пример, что в первом файле, что во втором и что нужно получить.
а то ничего не понятно.

Re: склеить два файла

Сообщение Slimy » 15.01.2007 19:23

Читайте также:  Linux автозапуск bash скрипт

Как известно, файл на диске может лежать не одним куском, а в разброс. То есть, в принципе, можно склеить файлы не читая их. Как это сделать?

хочешь менять структуру файловой системы?

тогда читай маны по утилитам к твоей файловой системе.

Это явно опасный способ и грозит тем что может навернуть все ф.с. Да и в безопасности какая дыра программе с такими правами ничего не стоит поменять хотябы файлик в ядром .Может есть какие системные вызовы ориентированные на это дело?

Если уже ничего не помогает — прочти инструкцию.
sysinstall — гадость 🙂
ASUS A6q00Vm Pentium-M 1.7 GHz, 2Gb RAM, 160Gb HDD,
GeForce Go 7300 64Mb video

Re: склеить два файла

Сообщение susik » 16.01.2007 09:08

susik
приведи пример, что в первом файле, что во втором и что нужно получить.
а то ничего не понятно.

Ну у меня была задача такая, я ее решил правда немного подругому, но все равно стало интересно как склеить два файла.
Значит в первом файле, назовем его допустим file1.txt, следующая информация:
mv ‘Track 1 Albom 1.mp3.HWFIUFG09345034THEEGH.test’
mv ‘Track 2 Albom 1.mp3.KJDHF39048UT930GUJDJFF.test
mv ‘Track 2 Albom 1.mp3.JISH904JF.test’

А во втором файле
‘Track 1 Albom 1.mp3’
‘Track 2 Albom 1.mp3’
‘Track 3Albom 1.mp3’

А результат в третьем файле должен быть:

mv ‘Track 1 Albom 1.mp3.HWFIUFG09345034THEEGH.test’ ‘Track 1 Albom 1.mp3’
и т.д.
Вот я и хотел склеить файлы, что бы собрать команду mv по переименованию файлов.

Вообще первоначальная задача стояла переименовать файлы в директории типа ‘Track 2 Albom 1.mp3.JISH904JF.test’.
Половина файлов я смог переименовать, а в оставшихся файла в названии присутствовали пробелы (как в приведенном примере)
У меня задача не решалась из-за того что если я загонял в цикл for имена файлов где есть пробелы, то у меня полечалось не 1 переменная, а соттвественно несколько, поэтому я решил список файлов загнать в файл. Получил два файла которые я привел выше.

Источник

Concatenating multiple text files into a single file in Bash

What is the quickest and most pragmatic way to combine all *.txt file in a directory into one large text file? Currently I’m using windows with cygwin so I have access to BASH. Windows shell command would be nice too but I doubt there is one.

12 Answers 12

This appends the output to all.txt

you may run into a problem where it cats all.txt into all.txt. I have this problem with grep sometimes, not sure if cat has the same behavior.

@rmeador yes, that is true, if all.txt already exists you will have this problem. This problem is solved by providing the output file with a different extension, or moving all.txt to a different folder.

Читайте также:  Линукс запуск от имени администратора

Just remember, for all the solutions given so far, the shell decides the order in which the files are concatenated. For Bash, IIRC, that’s alphabetical order. If the order is important, you should either name the files appropriately (01file.txt, 02file.txt, etc. ) or specify each file in the order you want it concatenated.

$ cat file1 file2 file3 file4 file5 file6 > out.txt 

The Windows shell command type can do this:

Type type command also writes file names to stderr, which are not captured by the > redirect operator (but will show up on the console).

Just be aware that if you put the output file in the same directory as the original file it will cause a duplication because it will also combine the new output file twice.

You can use Windows shell copy to concatenate files.

To append files, specify a single file for destination, but multiple files for source (using wildcards or file1+file2+file3 format).

This as the IMHO cleanest solution with basically no side effects that beginners could trip over unfortunately does not get appreciated enough 🙁

Worked pretty well, except at the very end of my file I got a weird SUB special unicode character. Deleting it is pretty easy programmatically but not sure why that happened.

Be careful, because none of these methods work with a large number of files. Personally, I used this line:

for i in $(ls | grep ".txt");do cat $i >> output.txt;done 

EDIT: As someone said in the comments, you can replace $(ls | grep «.txt») with $(ls *.txt)

EDIT: thanks to @gnourf_gnourf expertise, the use of glob is the correct way to iterate over files in a directory. Consequently, blasphemous expressions like $(ls | grep «.txt») must be replaced by *.txt (see the article here).

Good Solution

for i in *.txt;do cat $i >> output.txt;done 

Mandatory ParsingLs link, together with a downvote (and you deserve more than one downvote, because ls | grep is a seriously bad antipattern).

Got an upvote from me because it allows for arbitrary testing/ operations by file name prior to output and it’s quick and easy and good for practice. (In my case I wanted: for i in *; do echo -e «\n$i:\n»; cat $1; done )

find . -type f -name '*.txt' -exec cat <> + >> output.txt 

Since OP says the files are in the same directory, you may need to add -maxdepth 1 to the find command.

This should be the correct answer. It will work properly in a shell script. Here is a similar method if you want output sorted: sort -u —output=»$OUTPUT_FILE» —files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)

Читайте также:  Kali linux vdi image

This is a very flexible approach relying on all the strengths of the find . My favourite! Surely cat *.txt > all.txt does the job within the same directory (as pointed out above). To me, however, becoming comfortably fluent in using find has been a very good habit. Today they’re all in one folder, tomorrow they have multiple file-endings across nested directory hierarchies. Don’t overcomplicate, but also, do make friends with find . 🙂

Источник

Wpilot

Команда cat очень полезна в Linux. Она имеет три основные функции связанные с манипулированием текстовыми файлами: создание, отображение и объединение.

Давайте предположим что у вас есть три текстовых файла: file1.txt, file2.txt и file3.txt. Вы хотите объединить их в один текстовый файл содержащий информацию о всех трех в указанном порядке. Вы можете сделать это с помощью команды cat.

Просто откройте терминал и введите следующую команду:

cat file1.txt file2.txt file3.txt

Замените имена файлов в приведенном выше примере своими именами.

Объединенное содержимое трех текстовых файлов появится в вашем терминале.

Вероятно вы захотите объединить эти текстовые файлы в другой текстовый файл а не просто распечатать результаты на экране терминала. Это очень просто. Все что вам нужно сделать это добавить символ > после списка объединяемых файлов а затем указать имя окончательного текстового файла.

cat file1.txt file2.txt file3.txt> file4.txt

Теперь если вы откроете файл file4.txt с помощью команды cat или с помощью выбранного вами текстового редактора вы обнаружите что он содержит текст первых трех текстовых файлов.

Если вы объединяете списки элементов из нескольких файлов и хотите чтобы они были в алфавитном порядке в объединенном файле вы можете отсортировать объединенные элементы в конечном файле. Для этого используйте команду sort. Все строки текста в файле в результате будут отсортированы в алфавитном порядке.

cat file1.txt file2.txt file3.txt | sort > file4.txt

Существует также способ добавления файлов в конец существующего файла. Введите команду cat а затем файл которые вы хотите добавить в конец существующего файла. Затем введите два символа >> и имя конечного файла в который хотите добавить текст.

cat file5.txt >> file4.txt

Если вы хотите добавить немного нового текста в существующий текстовый файл используйте команду cat чтобы сделать это непосредственно из терминала. Введите команду cat за которой следует двойной символ >> и имя файла в который вы хотите добавить текст.

На следующей строке появится курсор. Начните вводить текст который хотите добавить в файл. Когда закончите нажмите Enter после последней строки а затем нажмите Ctrl + D чтобы скопировать этот текст в конец файла и выйти из cat.

Источник

Оцените статью
Adblock
detector