如何在Windows中拆分大文本文件?

问题描述 投票:19回答:3

我有一个大小为2.5 GB的日志文件。有没有办法使用Windows命令提示符将此文件拆分为较小的文件?

windows text cmd split size
3个回答
40
投票

如果你已经安装了Git for Windows,你应该安装Git Bash,因为它附带了Git。

使用Git Bash中的split命令拆分文件:

  • 到每个大小500MB的文件:split myLargeFile.txt -b 500m
  • 到每个10000行的文件:split myLargeFile.txt -l 10000

提示:

  • 如果您没有Git / Git Bash,请从https://git-scm.com/download下载
  • 如果你丢失了Git Bash的快捷方式,你可以使用C:\Program Files\Git\git-bash.exe运行它

That's it!


我总是喜欢这个例子......

例:

enter image description here

你可以在这张图片中看到split生成的文件名为xaaxabxac等。

这些名称由前缀和后缀组成,您可以指定。由于我没有指定我想要的前缀或后缀,前缀默认为x,后缀默认为两个字符的字母枚举。

另一个例子:

这个例子说明了

  • 使用文件名前缀MySlice(而不是默认的x),
  • -d标志使用数字后缀(而不是aaabac等...),
  • 和选项-a 5告诉它我希望后缀长度为5位数:

enter image description here


1
投票
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

-2
投票

您可以使用命令split来执行此任务。例如,此命令进入命令提示符

split YourLogFile.txt -b 500m

创建几个大小为500 MB的文件。对于您的大小的文件,这将花费几分钟。您可以将输出文件(默认情况下称为“xaa”,“xab”,...等)重命名为* .txt,以便在您选择的编辑器中打开它。

确保检查命令的帮助文件。您还可以按行数拆分日志文件或更改输出文件的名称。

(在Windows 7 64位上测试)

© www.soinside.com 2019 - 2024. All rights reserved.