Объединение текстовых файлов с командной строкой Windows, удаление ведущих строк
мне нужно объединить некоторые относительно большие текстовые файлы, и я предпочел бы сделать это с помощью командной строки. К сожалению, у меня есть только Windows, и я не могу установить новое программное обеспечение.
type file1.txt file2.txt > out.txt
позволяет мне почти получить то, что я хочу, но я не хочу 1-й строки file2.txt должен быть включен в out.формат txt.
Я заметил, что more имеет +n возможность указать начальную линию, но мне не удалось объединить их, чтобы получить желаемый результат. Я знаю, что это может быть невозможно в Windows, и я всегда могу редактировать.txt вручную, чтобы избавиться от строки, но есть ли простой способ сделать это из командной строки?
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.csv800 МБ иfile2.csv400 МБ, эти две команды заняли менее 5 секунд на моей машине. В подсказке Cygwin, не меньше. Я думал, что команды Linux должны быть медленными в Cygwin, но этот подход потребовал гораздо меньше усилий и был намного проще, чем любой подход windows, который я мог найти.
в powershell:
Get-Content file1.txt | Out-File out.txt Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append 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