it-swarm.com.de

Wie kann ich eine große Textdatei in Windows aufteilen?

Ich habe eine Protokolldatei mit einer Größe von 2,5 GB. Gibt es eine Möglichkeit, diese Datei mithilfe der Windows-Eingabeaufforderung in kleinere Dateien aufzuteilen?

35
Albin

Wenn Sie Git für Windows installiert haben, sollten Sie Git Bash installiert haben, da dies mit Git geliefert wird.

Verwenden Sie den Befehl split in Git Bash, um eine Datei zu teilen:

  • in Dateien mit einer Größe von jeweils 500 MB: split myLargeFile.txt -b 500m

  • in Dateien mit jeweils 10000 Zeilen: split myLargeFile.txt -l 10000

Tipps:

  • Wenn Sie nicht über Git/Git Bash verfügen, laden Sie es unter https://git-scm.com/download herunter

  • Wenn Sie die Verknüpfung zu Git Bash verloren haben, können Sie sie mit C:\Program Files\Git\git-bash.exe ausführen.

Das ist es!


Ich mag aber immer Beispiele ...

Beispiel:

enter image description here

Sie können in diesem Bild sehen, dass die von split erzeugten Dateien den Namen xaa, xab tragen. , xac, etc.

Diese Namen bestehen aus einem Präfix und einem Suffix, die Sie angeben können. Da ich nicht angegeben habe, wie das Präfix oder Suffix aussehen soll, ist das Präfix standardmäßig x und das Suffix standardmäßig eine alphabetische Aufzählung mit zwei Zeichen.

Ein weiteres Beispiel:

Dieses Beispiel zeigt

  • mit einem Dateinamen-Präfix von MySlice (anstelle des Standard-x),
  • das -d Flag für die Verwendung von numerischen Suffixen (anstelle von aa, ab, ac, etc ...),
  • und die Option -a 5, um anzugeben, dass die Suffixe 5 Ziffern lang sein sollen:

enter image description here

61
Josh Withee
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

Cut

filter cut {t|b} {i|x} NumOfLines

Schneidet die Anzahl der Zeilen vom oberen oder unteren Ende der Datei ab.

t - top of the file
b - bottom of the file
i - include n lines
x - exclude n lines

Beispiel

cscript /nologo filter.vbs cut t i 5 < "%systemroot%\win.ini"

Ein anderer Weg Dies gibt Leitungen 5001+ aus, die für Ihre Verwendung angepasst sind. Dies verbraucht fast keinen Speicher.

Do Until Inp.AtEndOfStream
         Count = Count + 1
         If count > 5000 then
            OutP.WriteLine Inp.Readline
         End If
Loop
1
bill