web-dev-qa-db-fra.com

Comment diviser un fichier texte volumineux dans Windows?

J'ai un fichier journal avec une taille de 2,5 Go. Est-il possible de scinder ce fichier en fichiers plus petits en utilisant l'invite de commande Windows?

35
Albin

Si vous avez installé Git pour Windows , vous devriez avoir installé Git Bash, car il est livré avec Git.

Utilisez la commande split de Git Bash pour scinder un fichier:

  • en fichiers de 500 Mo chacun: split myLargeFile.txt -b 500m

  • dans des fichiers de 10000 lignes chacun: split myLargeFile.txt -l 10000

Astuces:

  • Si vous n'avez pas Git/Git Bash, téléchargez-le à https://git-scm.com/download

  • Si vous avez perdu le raccourci vers Git Bash, vous pouvez l’exécuter avec C:\Program Files\Git\git-bash.exe

C'est ça!


J'aime toujours les exemples cependant ...

Exemple:

enter image description here

Vous pouvez voir dans cette image que les fichiers générés par split sont nommés xaa, xab , xac, etc.

Ces noms sont composés d'un préfixe et d'un suffixe que vous pouvez spécifier. Étant donné que je n'ai pas précisé à quoi ressembler le préfixe ou le suffixe, le préfixe par défaut est x et le suffixe par défaut pour une énumération alphabétique de deux caractères.

Autre exemple:

Cet exemple montre

  • en utilisant un préfixe de nom de fichier de MySlice (au lieu de la valeur par défaut x),
  • le -d drapeau pour l’utilisation de suffixes numériques (au lieu de aa, ab, ac, etc ...),
  • et l'option -a 5 pour lui dire que je veux que les suffixes aient 5 chiffres:

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

Couper

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

Réduit le nombre de lignes en haut ou en bas du fichier.

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

Exemple

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

Une autre façon Cette sortie des lignes 5001+, adapte pour votre utilisation. Cela utilise presque pas de mémoire.

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