Как разбить большой текстовый файл в Windows?

У меня есть файл журнала размером 2,5 ГБ. Есть ли способ разделить этот файл на более мелкие файлы с помощью командной строки 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

Это!


Хотя мне всегда нравятся примеры...

Пример:

enter image description here

Вы можете увидеть в этом образе, что файлы, созданные split названы xaa, xab, xac и т.д.

Эти имена состоят из префикса и суффикса, который вы можете указать. Поскольку я не указал, как должен выглядеть префикс или суффикс, по умолчанию используется префикс x, а в суффиксе - двухсимвольное перечисление.

Другой пример:

Этот пример демонстрирует

  • используя префикс имени файла MySlice (вместо x по умолчанию),
  • флаг -d для использования числовых суффиксов (вместо aa, ab, ac и т.д...),
  • и опция -a 5 сказать, что я хочу, чтобы суффиксы были длиной 5 цифр:

enter image description here

Ответ 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 бит)