Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

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

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


В замечательной теме раскрывается вопрос, как разбить большой тхт файл на много мелких по кол-ву строк
Моя задача чуть шире. Есть файл на 10 млн строк. Мне нужно получить 100 папок, в каждой по 100 файлов тхт, в каждом файле по 1000 строк из стартового файла.
Названия папок 1,2,3,4,5,...,100
Названия файлов 1.txt, 2.txt, 3.txt, ..., 100.txt

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

Отправлено: 15:15, 11-07-2018

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата Abricosio:
Кто-нибудь может помочь с этой непосильной для меня задачей? »
CMD тут вряд ли поможет... 10 млн. строк... подавится считать...
Лучше вооружитесь powershell-ом.

-------
scio me nihil scire. Ѫ


Отправлено: 15:29, 11-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


А как powershellом это сделать?

Отправлено: 15:32, 11-07-2018 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Abricosio, размер файла:
Цитата Abricosio:
Есть файл на 10 млн строк. »
каков? В мегабайтах?

Отправлено: 17:04, 11-07-2018 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Abricosio:
как powershellом это сделать? »
просто по файлам раскидать вот так:
Код: Выделить весь код
$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:
размер файла:
каков? В мегабайтах? »
это неважно, не требуется никакого хитрого анализа, чтобы его его целиком в память пихать

Отправлено: 17:59, 11-07-2018 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата Abricosio:
А как powershellом это сделать? »
Как-то так:
Код: Выделить весь код
$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:
чтобы его его целиком в память пихать »
если его целиком пихать в память, powershell загнется не хуже (или не лучше?) cmd

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 11-07-2018 в 18:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:00, 11-07-2018 | #6


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
если его целиком пихать в память, powershell загнется не хуже (или не лучше?) cmd »
и сам делаешь то же самое: если пользователь решит делить файл не на 100 тыс. файлов, а на два? - всё переписывать?

Отправлено: 18:36, 11-07-2018 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата Busla:
и сам делаешь то же самое »
где? присмотрись повнимательнее...

Разве что, можно чуток оптимизировать, чтобы не дергать $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++
}

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 11-07-2018 в 19:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:43, 11-07-2018 | #8


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Busla:
это неважно, не требуется никакого хитрого анализа, чтобы его его целиком в память пихать »
Э… Ну, запихните в память текстовый файл в десять-двадцать гигабайт.

Отправлено: 19:41, 11-07-2018 | #9


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
где? »
результирующий файл формируется в памяти и за раз пишется инструкцией set-content

Цитата Iska:
Ну, запихните в память текстовый файл в десять-двадцать гигабайт. »
зачем?

Отправлено: 20:17, 11-07-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] разбить файл на много файлов по шаблону и каждый файл положить в папку Mezolick Скриптовые языки администрирования Windows 3 03-02-2017 08:38
CMD/BAT - [решено] разбить по строкам txt shadowbat Скриптовые языки администрирования Windows 54 10-11-2015 16:20
CMD/BAT - [решено] Разбить txt файл по строкам и файлам Acred Скриптовые языки администрирования Windows 9 12-10-2015 18:08
Router - [решено] Есть подключение по Wi-Fi, но интернет - только по кабелю. roniro Сетевое оборудование 7 17-09-2013 13:54
Router - [решено] Подключение к роутеру по Wi-Fi есть, но интернет-только по кабелю. roniro Сетевое оборудование 4 06-10-2012 19:20




 
Переход