CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Аватара пользователя
Abricosio

CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение Abricosio »

В замечательной
CMD/BAT - [решено] разбить по строкам txt
раскрывается вопрос, как разбить большой тхт файл на много мелких по кол-ву строк

Моя задача чуть шире. Есть файл на 10 млн строк. Мне нужно получить 100 папок, в каждой по 100 файлов тхт, в каждом файле по 1000 строк из стартового файла.

Названия папок 1,2,3,4,5,...,100

Названия файлов 1.txt, 2.txt, 3.txt, ..., 100.txt



Кто-нибудь может помочь с этой непосильной для меня задачей?
Аватара пользователя
YuS_2

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение YuS_2 »

Цитата Abricosio:



Кто-нибудь может помочь с этой непосильной для меня задачей?
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




CMD тут вряд ли поможет... 10 млн. строк... подавится считать... Изображение

Лучше вооружитесь powershell-ом.
Аватара пользователя
Abricosio

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение Abricosio »

Цитата Abricosio:



как powershellом это сделать?
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




просто по файлам раскидать вот так:



Код:

Код: Выделить всё

$counter = 0; $linesPerFile=10000; Get-Content .\big.log | ForEach-Object { $counter++; Add-Content -Path "$(($counter/$linesPerFile).ToString('000000')).log" -Value $_ }

к сожалению, в реализации Add-Content Микрософт накосипорила - директории он автоматически не создаёт, поэтому коротко не написать Изображение

После Get-Content указываете путь к файлу, в текущей директории создаются файлы по 10 тыс строк (количество задаётся переменной $linesPerFile)




Цитата Iska:



размер файла:

каков? В мегабайтах?
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




это неважно, не требуется никакого хитрого анализа, чтобы его его целиком в память пихать
Аватара пользователя
Abricosio

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение Abricosio »

Цитата Abricosio:



А как powershellом это сделать?
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




Как-то так:



Код:

Код: Выделить всё

$fl = 'test.txt'
$root = 'root'
if (!(test-path $root)){md $root|out-null}
gc $fl -read 1000|%{$i,$n=1,1}{
	$tmp = "$root\$n"
	if(!(test-path $tmp)){md $tmp|out-null}
	set-content -path "$tmp\$i.txt" -val $_
	switch ($i) {
	  100 {$n++;$i=0}
	}
	$i++
}


Цитата Busla:



чтобы его его целиком в память пихать
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




если его целиком пихать в память, powershell загнется не хуже (или не лучше?) cmd Изображение
Аватара пользователя
Busla

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение Busla »

Цитата YuS_2:



если его целиком пихать в память, powershell загнется не хуже (или не лучше?) cmd
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




и сам делаешь то же самое: если пользователь решит делить файл не на 100 тыс. файлов, а на два? - всё переписывать?
Аватара пользователя
YuS_2

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение YuS_2 »

Цитата Busla:



и сам делаешь то же самое
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




где? присмотрись повнимательнее...



Разве что, можно чуток оптимизировать, чтобы не дергать $tmp при каждой итерации:



Код:

Код: Выделить всё

$fl = 'test.txt'
$root = 'root'
if (!(test-path $root)){md $root|out-null}
gc $fl -read 1000|%{$i,$n=1,1;$tmp = "$root\$n"}{
	if(!(test-path $tmp)){md $tmp|out-null}
	set-content -path "$tmp\$i.txt" -val $_
	switch ($i) {
	  100 {$n++;$i=0;$tmp = "$root\$n"}
	}
	$i++
}
Аватара пользователя
Busla

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение Busla »

Цитата Busla:



это неважно, не требуется никакого хитрого анализа, чтобы его его целиком в память пихать
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




Э… Ну, запихните в память текстовый файл в десять-двадцать гигабайт.
Аватара пользователя
YuS_2

Re: CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Сообщение YuS_2 »

Цитата YuS_2:



где?
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




результирующий файл формируется в памяти и за раз пишется инструкцией set-content




Цитата Iska:



Ну, запихните в память текстовый файл в десять-двадцать гигабайт.
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам




зачем?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»