web-dev-qa-db-ja.com

Windowsで大きなテキストファイルを分割する方法は?

2.5 GBのサイズのログファイルがあります。 Windowsコマンドプロンプトを使用してこのファイルを小さなファイルに分割する方法はありますか?

35
Albin

Git for Windows をインストールしている場合、Gitに付属しているため、Git Bashをインストールする必要があります。

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を使用して実行できます

それでおしまい!


私はいつも例が好きです...

例:

enter image description here

この画像では、splitによって生成されたファイルの名前がxaaxabxacなどであることがわかります。

これらの名前は、指定可能なプレフィックスとサフィックスで構成されます。プレフィックスまたはサフィックスの外観を指定しなかったため、プレフィックスはデフォルトでxになり、サフィックスはデフォルトで2文字のアルファベット列挙になりました。

別の例:

この例は示します

  • MySliceのファイル名プレフィックスを使用する(デフォルトのxの代わりに)、
  • 数値の接尾辞を使用するための-dフラグ(aaabacなどの代わりに)、
  • オプション-a 5は、接尾辞の長さを5桁にすることを指示します。

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

カット

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
1
bill