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?
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
J'aime toujours les exemples cependant ...
Exemple:
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
MySlice
(au lieu de la valeur par défaut x
),-d
drapeau pour l’utilisation de suffixes numériques (au lieu de aa
, ab
, ac
, etc ...),-a 5
pour lui dire que je veux que les suffixes aient 5 chiffres: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