У меня есть файл журнала размером 2,5 ГБ. Есть ли способ разделить этот файл на более мелкие файлы с помощью командной строки Windows?
Как разбить большой текстовый файл в Windows?
Ответ 1
Если вы установили Git для Windows, у вас должен быть установлен Git Bash, поскольку он поставляется с Git.
Используйте команду split
в Git Bash, чтобы разделить файл:
-
на файлы размером 500 МБ каждый:
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
, а в суффиксе - двухсимвольное перечисление.
Другой пример:
Этот пример демонстрирует
- используя префикс имени файла
MySlice
(вместоx
по умолчанию), - флаг
-d
для использования числовых суффиксов (вместоaa
,ab
,ac
и т.д...), - и опция
-a 5
сказать, что я хочу, чтобы суффиксы были длиной 5 цифр:
Ответ 2
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
Ответ 3
Вы можете использовать команду split для этой задачи. Например, эта команда, введенная в командную строку
split YourLogFile.txt -b 500m
создает несколько файлов размером 500 Мбайт каждый. Это займет несколько минут для файла вашего размера. Вы можете переименовать выходные файлы (по умолчанию называемые "xaa", "xab",... и т.д.) В *.txt, чтобы открыть его в редакторе по вашему выбору.
Обязательно проверьте файл справки для команды. Вы также можете разбить файл журнала на количество строк или изменить имя ваших выходных файлов.
(протестировано на Windows 7 64 бит)