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



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



type file1.txt file2.txt > out.txt


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



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

1391   10  

10 ответов:

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

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

copy /b temp+file1.txt  out.txt

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

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

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

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

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

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

используйте команду 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

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

Я бы поставил это в комментарии к 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 МБ)

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

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

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

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

в powershell:

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt
more +2 file1.txt > type > out.txt && type file2.txt > out.txt

это нужно 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

Comments

    Ничего не найдено.