7 сентября 2014 г.

Поделить текстовый файл на части

Поделить текстовый файл на части

Назначение

Если нужно открыть большой Log-файл в Windows, но ни один из установленных инструментов не позволяет открыть файл такого объёма (100-2000 МБайт). То можно поделить файл на меньшие части, используя командный сценарий (bat-ник). Возможность выполнить bat-файл всегда есть в Windows. Расход оперативной памяти при выполнении разделения будет приемлемым - двойной размер файла (600 МБайт ОЗУ для файла в 300 МБайт).

Текст сценария SplitBigTextFile.bat

echo off
setlocal enabledelayedexpansion

set fileName=%1
set partSize=%2
set partExt=%3

set index=0
set partNumber=0

for /F "tokens=*" %%i in (!fileName!) do (
set /a index+=1
if !index! GTR !partSize! (
set /a partNumber+=1
set index=0
)
@echo %%i >> !fileName!.!partNumber!.!partExt!
)

Параметры

Параметры выполнения скрипта, должны быть переданы при вызове:
  1. Путь к текстовому файлу, на основе которого надо создать несколько маленьких файлов.
  2. Максимальное количество строк, в маленьком файле.
  3. Расширение для создаваемых маленьких файлов.

Пример

Пример вызова:
SplitBigTextFile.bat D:\BigLog.log 10000 log

В результате работы сценария рядом с файлом D:\BigLog.log будут созданы файлы:
  1. D:\BigLog.log.1.log
  2. D:\BigLog.log.2.log
  3. D:\BigLog.log.3.log
  4. ...
В каждом из которых будет только по 10000 строк текста. В последнем файле, может быть менее 10000 строк.

А такие небольшие файлы, уже можно будет просмотреть в имеющемся в данный момент текстовом редакторе.

update 11 марта 2015. При работе потребуется ОЗУ в два раза больше размера файла. Для начала работы объём свободной оперативной памяти должен быть больше объёма файла. Так если файл размером 2 ГБайт, то при свободных 2,3 ГБайт процесс запустится и будет работать. Файлы более 2 ГБайт не разделял таким способом — памяти не хватает. Обработка некоторых текстовых файлов с кодировкой UCS-2 Little Endian не работает изначально (так выгружаютя файлы реестра *.reg). Чтобы заработала можно с помощью команды type перенести содержимое сбойного файла в новый файл командой:

type сбойныйФайл.txt > новыйФайл.txt
теоретически, могут потеряться данные, так как кодировка файла сменится на ANSI, но на практике данные не теряются — большая часть символов латинские.

Комментариев нет:

Отправить комментарий