当前位置: 首页 > 知识库问答 >
问题:

如何在windows中拆分大文本文件?[关闭]

陆伟
2023-03-14

这个问题似乎不是关于特定的编程问题、软件算法或主要由程序员使用的软件工具。如果您认为该问题将在另一个Stack Exchange站点上讨论,您可以留下评论,解释该问题可以在何处回答。

未解决原始关闭原因

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

共有3个答案

袁弘化
2023-03-14

低于每 500 个代码拆分文件

@echo off
setlocal ENABLEDELAYEDEXPANSION
REM Edit this value to change the name of the file that needs splitting. Include the extension.
SET BFN=upload.txt
REM Edit this value to change the number of lines per file.
SET LPF=15000
REM Edit this value to change the name of each short file. It will be followed by a number indicating where it is in the list.
SET SFN=SplitFile

REM Do not change beyond this line.

SET SFX=%BFN:~-3%

SET /A LineNum=0
SET /A FileNum=1

For /F "delims==" %%l in (%BFN%) Do (
SET /A LineNum+=1

echo %%l >> %SFN%!FileNum!.%SFX%

if !LineNum! EQU !LPF! (
SET /A LineNum=0
SET /A FileNum+=1
)

)
endlocal
Pause

见下文:https://forums . tech guy . org/threads/solved-split-a-100000-line-CSV-into-5000-line-CSV-files-with-dos-batch . 1023949/

厉钊
2023-03-14
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
仲和韵
2023-03-14

如果您已经安装了适用于Windows的Git,那么应该已经安装了Git Bash,因为这是Git附带的。

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

>

  • 放入每个大小为 500MB 的文件中:拆分 my大文件.txt -b 500m

    放入每个有 10000 行的文件中:拆分 myLarge 文件.txt -l 10000

    提示:

    >

  • 如果您没有Git/Git Bash,请在https://git-scm.com/download下载

    如果您丢失了Git Bash的快捷方式,您可以使用C:\Program Files\Git\git-bash.exe运行它。

    不过我总是喜欢例子...

    例:

    您可以在此图像中看到,拆分生成的文件名为xaaxabxac等。

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

    另一个例子:

    这个例子演示了

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

  •  类似资料:
    • 问题内容: 我想将一个大小约为50GB的大型文本文件拆分为多个文件。文件中的数据就像这样-[x = 0-9之间的任何整数] 文件中可能只有几十亿行,我想为每个文件写例如30/40百万。我想这些步骤将是- 我要打开文件 然后使用readline()必须逐行读取文件并同时写入新文件 一旦达到最大行数,它将创建另一个文件并再次开始写入。 我想知道如何将所有这些步骤以一种高效且更快的内存方式组合在一起。我

    • 我有一个骆驼路由,它需要将一个大文件(600k行ID)拆分为600k个单独的消息,然后将它们推送到Activemq队列中。我如何从骆驼侧优化路线以提高吞吐量?我目前达到了到AMQ的大约150个消息/秒的吞吐量。以下是当前的路线。如有任何建议,不胜感激!

    • 问题内容: 我在HDFS目录中有一堆小文件。尽管文件 量 较小, 但是每个文件的处理时间却很大 。也就是说,一个文件(它是的默认拆分大小)甚至需要几个小时才能处理。 我需要做的是 减小拆分大小 ,以便我可以 利用更多的节点 来完成工作。 所以问题是,怎么可能通过说来分割文件?我需要实现我自己和这一点,或有任何参数设置?谢谢。 问题答案: 可以针对每个作业单独设置的参数。不要更改, 因为这对于HDF

    • 我有一个文本文件,其中包含我试图用Python读取的数据: 现在,我只想得到以F2REAL开头的值;每行,我要提取6个值。值1从索引11到索引20,值到从索引21到30。。。,值6来自索引61:70 我尝试了以下方法: 这不会读取电子功率,因为我得到了[1.146,-1.015,...]。我如何正确地得到它? 有没有更好的方法而不是写10:19,20:29,..60:69?所有感兴趣的行都有6列并

    • 问题内容: 我得到一个包含以下内容的文本文件(12 MB): 有什么办法来分流到12个* .txt文件让说,,(......)? 问题答案: 您可以使用linux bash核心实用程序 注意,或两者都OK,但大小不同。MB为1000 * 1000,M为1024 ^ 2 如果要按行分隔,可以使用参数。 更新 Kirill建议的另一种解决方案,您可以执行以下操作 请注意,是不是,有几个选项,比如,,,