Как насчет больших файлов?



  • Вопрос восновном для фана, идея дурацкая и лучше перл, но как насчет попарсит басом текстовый файлик на 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
    

    и терпения

    нет нет нет, подойдет только для файлов до половины гига