Объединение текстовых файлов с командной строкой Windows, удаление ведущих строк

Мне нужно объединить некоторые относительно большие текстовые файлы и предпочтет сделать это через командную строку. К сожалению, у меня только Windows, и я не могу установить новое программное обеспечение.

type file1.txt file2.txt > out.txt

позволяет мне почти получить то, что я хочу, но я не хочу, чтобы первая строка файла file2.txt была включена в out.txt.

Я заметил, что more имеет параметр +n для указания стартовой строки, но мне не удалось объединить их, чтобы получить результат, который я хочу. Я знаю, что это может быть невозможно в Windows, и я всегда могу отредактировать out.txt вручную, чтобы избавиться от строки, но есть ли простой способ сделать это из командной строки?

Ответ 1

more +2 file2.txt > temp
type temp file1.txt > out.txt

или вы можете использовать copy. Подробнее см. copy /?.

copy /b temp+file1.txt  out.txt

Ответ 2

Я использую это, и он хорошо работает для меня:

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

Конечно, перед каждым прогоном вы должны DELETE C:\Folder\ConcatenatedFile.csv

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

Ответ 3

У меня недостаточно очков репутации, чтобы прокомментировать рекомендацию использовать *.csv >> ConcatenatedFile.csv, но я могу добавить предупреждение:

Если вы создаете файл ConcatenatedFile.csv в том же каталоге, который вы используете для конкатенации, он будет добавлен к себе.

Ответ 4

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

FOR /F "skip=1" %i in (file2.txt) do @echo %i

Вы можете перенаправить вывод командного файла, содержащий что-то вроде...

FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i

Обратите внимание на double%, когда переменная FOR используется в пакетном файле.

Ответ 5

Я бы поставил это в комментарий к ghostdog74, за исключением того, что мой представитель слишком низок, так что здесь.

more +2 file2.txt > temp
Этот код фактически игнорирует строки 1 и 2 файла. OP хочет сохранить все строки из первого файла (чтобы сохранить строку заголовка), а затем исключить первую строку (предположительно одну и ту же строку заголовка) во втором файле, поэтому для исключения только строки заголовка OP следует использовать more +1.

type temp file1.txt > out.txt

Непонятно, какой порядок получается из этого кода. Добавлен temp к file1.txt (по желанию) или добавлен file1.txt к temp (нежелательно, поскольку строка заголовка будет похоронена в середине результирующего файла).

Кроме того, эти операции занимают ДЕЙСТВИТЕЛЬНО ДЛИННОЕ ВРЕМЯ с большими файлами (например, 300 МБ)

Ответ 6

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

Попробовав целую кучу команд в Windows и сильно расстроенный, а также попробовав всевозможные графические редакторы, которые обещали открыть большие файлы, но потом не смогли, я, наконец, вернулся к своим корням Linux и открыл мою подсказку Cygwin. Две команды:

cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv

Для file1.csv 800 МБ и file2.csv 400 МБ эти две команды заняли менее 5 секунд на моей машине. В подсказке Cygwin, не меньше. Я думал, что команды Linux должны быть медленными в Cygwin, но этот подход требует гораздо меньше усилий и был намного проще, чем любой подход к окнам, который я мог найти.

Ответ 7

Вот как это сделать:

(type file1.txt && more +1 file2.txt) > out.txt

Ответ 8

В PowerShell:

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt

Ответ 9

Вы также можете просто попробовать это

type file2.txt >> file1.txt

Он добавит содержимое файла file2.txt в конец файла file1.txt.

Если вам нужен оригинальный файл file1.txt, сделайте резервную копию заранее. Или вы можете сделать это

type file1.txt > out.txt
type file2.txt >> out.txt

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

type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt

Ответ 10

В справке по copy объясняется, что подстановочные знаки можно использовать для объединения нескольких файлов в один.

Например, чтобы скопировать все файлы .txt в текущей папке, начинающиеся с "abc", в один файл с именем xyz.txt:

copy abc*.txt xyz.txt

Ответ 11

more +2 file1.txt > type > out.txt && type file2.txt > out.txt

Ответ 12

Это берет Test.txt с заголовками и добавляет Test1.txt и Test2.txt и записывает результаты в файл Testresult.txt после удаления заголовков из второго и третьего файлов соответственно:

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt