Как насчет больших файлов?
-
Вопрос восновном для фана, идея дурацкая и лучше перл, но как насчет попарсит басом текстовый файлик на 32.8 ГБ (35,320,972,803 байт)?
побывал прикрепить во вложении)))
-
@ruzne Легко, циклом берёшь часть файла и парсишь. На форуме была подобная тема.
-
@Fox ну там заморачиваться искать начало конца строки, а то или мусор пойдет или чтото упущу, а так если через взять ресурс вешается, в запуске, в записи выполняет со скоростями черепашьими(пока выполеняет)
-
@ruzne Есть альтернатива, разделить файл на множество 100 метровых например и работать в цикле меняя файлы, быстрее и удобнее. Разделить можно через командную строку.
-
@Fox файл хорошо что не бинарный, текстовый, формата
1. индекс:email:username:хеш:ещехеш\n 2. индекс:email:username:хеш:ещехеш\n 3. индекс:email:username:хеш:ещехеш\n
ну я его нарайзаю кусками, а конец 100метрового куска окажется в середине строки, это если хорошо, это мне надо в конце куска недостроку выкидывать и смещение для следующего куска не 100 метров делать а высчитывать чтобы с той недостроки началось с начала
а вот нашол да
@Fox said in Работа с большими списками (файлами):@lirik Если так принципиально именно разбить, то можно с помощью командной строки..
Запустить процессsetlocal enabledelayedexpansion set q=0 set N=100 for /F "delims= " %%i in (file.txt) do ( set /a q+=1 if !q! GTR !N! set /a N+=100 @echo %%i >> file!N!.txt )
file.txt имя файла
цифра 100 это количество строк на которое разбивать файл (меняется в двух местах).но это слишком много, 30гигов чето такой бактник резать не захотел
-
поэтому добавлю, если файл действительно большой с БОЛЬШОЙ буквы БЫ
ищем awk/gawk
и так бат::строк set $n=10000 ::файл set $file=file.txt for /f "delims=" %%i in ('^<%$file% find /v /c ""') do set /a $m=100+%%i/%$n% for /l %%i in (100,1,%$m%) do set /a $i=%%i& call :sub :sub (awk -v S=%$i:~-2% -v N=%$n% "{L+=1;if (L>S*N && L<S*N+N+1) {print $0}}" ) <%$file% >list%$i:~-2%.txt
и терпения
нет нет нет, подойдет только для файлов до половины гига