2.5 GBのサイズのログファイルがあります。 Windowsコマンドプロンプトを使用してこのファイルを小さなファイルに分割する方法はありますか?
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
を使用して実行できます
私はいつも例が好きです...
例:
この画像では、split
によって生成されたファイルの名前がxaa
、xab
、xac
などであることがわかります。
これらの名前は、指定可能なプレフィックスとサフィックスで構成されます。プレフィックスまたはサフィックスの外観を指定しなかったため、プレフィックスはデフォルトでx
になり、サフィックスはデフォルトで2文字のアルファベット列挙になりました。
別の例:
この例は示します
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