случайная выборка подмножества файла в командной строке без замены - PullRequest
0 голосов
/ 10 марта 2020

Я следовал этой теме здесь , чтобы случайным образом перемешать данные из очень большого файла. Как указано в этой теме, shuf исчерпывает память и занимает много времени. В итоге я использовал команду perl perl -ne 'print if (rand() < .01)' huge_file.csv > sample.csv и работает довольно эффективно. Тем не менее, я заметил, что он выбирает дублированные строки. Мне было интересно, есть ли способ установить замену на False, чтобы предотвратить это?

1 Ответ

0 голосов
/ 10 марта 2020

Этот бит perl может печатать дубликаты, только если ваши исходные данные имеют повторяющиеся строки. Вы можете удалить их с помощью чего-то вроде

sort -u bigfile.csv | perl -ne 'print if (rand() < .01)' > sample.csv

sort довольно хорошо сортирует большие файлы, не занимая всю вашу память. Вы также можете удалить дубликаты после выбора линий случайных образцов с аналогичным

perl -ne 'print if (rand() < .01)' bigfile.csv | sort -u > sample.csv
...