Como dividir um ficheiro de texto grande no windows?
Tenho um ficheiro de registo com o tamanho de 2,5 GB. Existe alguma forma de dividir este ficheiro em ficheiros menores usando a linha de comandos do windows?
3 answers
Dado que o título pergunta Como dividir um ficheiro de texto grande no Windows, suponho que esteja aberto a formas que não usem a linha de comandos do windows.
Se tiver instalado o Git no Windows, deverá ter instalado o Git Bash, dado que isso vem com o Git.
Use o comando split
na Bash do Git para dividir um ficheiro:
Em ficheiros do tamanho 500MB cada um:
split myLargeFile.txt -b 500m
Em ficheiros com 10000 linhas cada um:
split myLargeFile.txt -l 10000
Dicas:
Use a opção
-c
em vez de-b
para se dividir em ficheiros do tamanho indicado sem se dividir no meio de uma linha .Se não tiver Git / Git Bash, faça o download em https://git-scm.com/download
Se você não tem um atalho para Git Bash, você pode executá - lo usando
C:\Program Files\Git\git-bash.exe
Set Arg = WScript.Arguments
set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
Set rs = CreateObject("ADODB.Recordset")
With rs
.Fields.Append "LineNumber", 4
.Fields.Append "Txt", 201, 5000
.Open
LineCount = 0
Do Until Inp.AtEndOfStream
LineCount = LineCount + 1
.AddNew
.Fields("LineNumber").value = LineCount
.Fields("Txt").value = Inp.readline
.UpDate
Loop
.Sort = "LineNumber ASC"
If LCase(Arg(1)) = "t" then
If LCase(Arg(2)) = "i" then
.filter = "LineNumber < " & LCase(Arg(3)) + 1
ElseIf LCase(Arg(2)) = "x" then
.filter = "LineNumber > " & LCase(Arg(3))
End If
ElseIf LCase(Arg(1)) = "b" then
If LCase(Arg(2)) = "i" then
.filter = "LineNumber > " & LineCount - LCase(Arg(3))
ElseIf LCase(Arg(2)) = "x" then
.filter = "LineNumber < " & LineCount - LCase(Arg(3)) + 1
End If
End If
Do While not .EOF
Outp.writeline .Fields("Txt").Value
.MoveNext
Loop
End With
Cortar
filter cut {t|b} {i|x} NumOfLines
Corta o número de linhas do topo ou do fundo do ficheiro.
t - top of the file
b - bottom of the file
i - include n lines
x - exclude n lines
Exemplo
cscript /nologo filter.vbs cut t i 5 < "%systemroot%\win.ini"
De outra forma esta saída linhas 5001+, adapte-se para o seu uso. Isto não usa quase nenhuma memória.
Do Until Inp.AtEndOfStream
Count = Count + 1
If count > 5000 then
OutP.WriteLine Inp.Readline
End If
Loop
Pode usar o comando split para esta tarefa. Por exemplo, este comando entrou na linha de comandos
split YourLogFile.txt -b 500m
Cria vários ficheiros com um tamanho de 500 MByte cada. Isso levará vários minutos para um arquivo do seu tamanho. Você pode mudar o nome dos arquivos de saída (por padrão chamado "xaa", "xab",... and so on) to *.txt para abri-lo no editor da sua escolha.
Certifique-se de verificar o ficheiro de Ajuda para o comando. Você também pode dividir o arquivo de registro por número de linhas ou alterar o nome dos seus ficheiros de saída.
(testado no Windows 7 64 bit)