Preciso concatenar alguns arquivos de texto relativamente grandes e preferiria fazê-lo através da linha de comando. Infelizmente, tenho apenas o Windows e não consigo instalar um novo software.
type file1.txt file2.txt > out.txt
permite que eu quase consiga o que quero, mas não quero que a primeira linha do arquivo2.txt seja incluída no out.txt.
Percebi que more
tem a +n
opção de especificar uma linha de partida, mas não consegui combiná-las para obter o resultado desejado. Estou ciente de que isso pode não ser possível no Windows e sempre posso editar out.txt manualmente para se livrar da linha, mas existe uma maneira simples de fazer isso na linha de comando?
copy
comando é muito mais rápido, mas coloca um caractere SUB no final. Há alguma maneira de evitar isto?copy /b *.txt combined.txt
sem precisar listar os arquivos individualmente.type file1.txt temp > out.txt
realmente anexar o segundo arquivo, sem um cabeçalho para o primeiroEu uso isso e funciona bem para mim:
TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv
Claro, antes de cada corrida, você precisa
DELETE C:\Folder\ConcatenatedFile.csv
O único problema é que, se todos os arquivos tiverem cabeçalhos, ele será repetido em todos os arquivos.
fonte
Não tenho pontos de reputação suficientes para comentar a recomendação de usar
*.csv >> ConcatenatedFile.csv
, mas posso adicionar um aviso:Se você criar um
ConcatenatedFile.csv
arquivo no mesmo diretório que está usando para concatenação, ele será adicionado a si mesmo.fonte
Use o comando FOR para repetir um arquivo linha por linha e, com a opção 'pular', para perder várias linhas de partida ...
Você pode redirecionar a saída de um arquivo em lotes, contendo algo como ...
Observe o dobro de% quando uma variável FOR é usada em um arquivo em lotes.
fonte
Veja como fazer isso:
fonte
Eu colocaria isso em um comentário para ghostdog74, exceto que meu representante é muito baixo, então aqui vai.
more +2 file2.txt > temp
Esse código realmente ignorará as linhas 1 e 2 do arquivo. O OP deseja manter todas as linhas do primeiro arquivo (para manter a linha do cabeçalho) e depois excluir a primeira linha (presumivelmente a mesma linha de cabeçalho) no segundo arquivo, para excluir apenas a linha de cabeçalho que o OP deve usar
more +1
.type temp file1.txt > out.txt
Não está claro qual ordem resulta desse código. É
temp
anexado afile1.txt
(como desejado) oufile1.txt
anexado atemp
(indesejável, pois a linha do cabeçalho seria enterrada no meio do arquivo resultante).Além disso, essas operações levam muito tempo com arquivos grandes (por exemplo, 300 MB)
fonte
Sei que você disse que não podia instalar nenhum software, mas não tenho certeza de quão rígida é essa restrição. Enfim, tive o mesmo problema (tentando concatenar dois arquivos com presumivelmente os mesmos cabeçalhos) e pensei em fornecer uma resposta alternativa para outras pessoas que chegarem a esta página, pois funcionou muito bem para mim.
Depois de tentar um monte de comandos no Windows e ficar seriamente frustrado, e também tentar todos os tipos de editores gráficos que prometiam abrir arquivos grandes, mas que não conseguiam, finalmente voltei às minhas raízes no Linux e abri o Cygwin pronto. Dois comandos:
Para
file1.csv
800file2.csv
MB e 400 MB, esses dois comandos levaram menos de 5 segundos na minha máquina. Em um prompt do Cygwin, nada menos. Eu pensei que os comandos do Linux deviam ser lentos no Cygwin, mas essa abordagem exigia muito menos esforço e era muito mais fácil do que qualquer abordagem do Windows que eu pudesse encontrar.fonte
No PowerShell:
fonte
Você também pode simplesmente tentar isso
Anexará o conteúdo do arquivo2.txt no final do arquivo1.txt
Se você precisar de file1.txt original, faça um backup com antecedência. Ou você pode fazer isso
Se você deseja interromper uma linha no final do primeiro arquivo, tente o seguinte comando antes de anexar.
fonte
A ajuda para
copy
explica que curingas podem ser usados para concatenar vários arquivos em um.Por exemplo, para copiar todos os arquivos .txt na pasta atual que começam com "abc" em um único arquivo chamado xyz.txt:
fonte
fonte
Isso leva
Test.txt
com cabeçalhos, anexaTest1.txt
eTest2.txt
grava os resultados noTestresult.txt
arquivo depois de remover os cabeçalhos do segundo e terceiro arquivos, respectivamente:fonte