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?

Author: Albin, 2015-08-03

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

 2
Author: Marathon55, 2018-08-27 16:03:25
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
 1
Author: bill, 2015-08-04 02:43:39

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)

 0
Author: Wintermute, 2016-07-27 08:37:52