我有一个大小为2.5 GB的日志文件。有没有办法使用Windows命令提示符将此文件拆分为较小的文件?
如果你已经安装了Git for Windows,你应该安装Git Bash,因为它附带了Git。
使用Git Bash中的split
命令拆分文件:
split myLargeFile.txt -b 500m
split myLargeFile.txt -l 10000
提示:
C:\Program Files\Git\git-bash.exe
运行它我总是喜欢这个例子......
例:
你可以在这张图片中看到split
生成的文件名为xaa
,xab
,xac
等。
这些名称由前缀和后缀组成,您可以指定。由于我没有指定我想要的前缀或后缀,前缀默认为x
,后缀默认为两个字符的字母枚举。
另一个例子:
这个例子说明了
MySlice
(而不是默认的x
),-d
标志使用数字后缀(而不是aa
,ab
,ac
等...),-a 5
告诉它我希望后缀长度为5位数: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
切
filter cut {t|b} {i|x} NumOfLines
剪切文件顶部或底部的行数。
t - top of the file
b - bottom of the file
i - include n lines
x - exclude n lines
例
cscript /nologo filter.vbs cut t i 5 < "%systemroot%\win.ini"
另一种方式输出5001+线,适合您的使用。这几乎没有使用内存。
Do Until Inp.AtEndOfStream
Count = Count + 1
If count > 5000 then
OutP.WriteLine Inp.Readline
End If
Loop
您可以使用命令split来执行此任务。例如,此命令进入命令提示符
split YourLogFile.txt -b 500m
创建几个大小为500 MB的文件。对于您的大小的文件,这将花费几分钟。您可以将输出文件(默认情况下称为“xaa”,“xab”,...等)重命名为* .txt,以便在您选择的编辑器中打开它。
确保检查命令的帮助文件。您还可以按行数拆分日志文件或更改输出文件的名称。
(在Windows 7 64位上测试)