@martensit

Как рандомно перемешать все строки в очень большом файле?

Как рандомно перемешать все строки в очень большом файле?
порядка 100.000.000 строк
  • Вопрос задан
  • 2213 просмотров
Решения вопроса 5
weranda
@weranda
Разделить на части, перемешать части, объединить части.
Ответ написан
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
Залить в базу, потом
select * from lines order by random()
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
Создайте shuffle.bat из кода ниже.
Затем :
type ваш_файл | shuffle.bat > result.txt

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET TmpFile=tmp%RANDOM%%RANDOM%.tmp
TYPE NUL >%Tmpfile%
FOR /F "tokens=*" %%i IN ('MORE') DO SET Key=!RANDOM!!RANDOM!!RANDOM!000000000000& ECHO !Key:~0,15!%%i>> %TmpFile%
FOR /F "tokens=*" %%i IN ('TYPE %TmpFile% ^| SORT') DO SET Line=%%i&ECHO.!Line:~15!
::DEL %TmpFile%
ENDLOCAL
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
CMD штука не сильно шустрая и это будет долго.
Реализовать можно примерно так- используя функцию %RANDOM% читайте случайную строку в вашем файле, записывайте ее содержимое в новый файл, с новой строки, старую строку удаляйте, и так пока останутся строки в исходном файле.

Хотя я бы на вашем месте посмотрел в сторону PS или Python для таких целей.
Ответ написан
Комментировать
yarkov
@yarkov
Помог ответ? Отметь решением.
Язык принципиален?
По логике примерно так:
1. Открываем поток на чтение
2. Считываем например тысячу строк
3. Перемешиваем
4. Сохраняем в файл temp_1000.txt

Повторяем действия пока файл не закончится, естественно меняя чмсло в имени временного файла.
А потом склеиваем в цикле файлы.
Или как-то так (примерно):
$ find temp_*.txt |  while read A ; do cat $A >> outfile.txt ; done

**************************
Сорян )) Тег CMD не заметил ))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы