Алгоритм такой, от обратного.
1. Получаем количество строк.
2. Генерим случайное число из диапазона 0 - количество строк. Это будет номер случайной строки.
3. Берем случайную строку, при этом знаем ее номер.
4. Делаем проверку
5. Удаляем строку.
6. Повторяем в цикле все шаги, при этом количество строк будет всегда N-1 (Рандомное число из диапазона 0 - (N-1) )
7. Если задача многопоточная, то в 3 шаге берем строку с удалением, а в 5 добавляем строку в конец файла. Тогда вероятность взять одну и ту же строку нескольким потокам сводиться к 0.
Посмотреть вложение NubeAnswer.xmlz