Как захватить случайный раздел посреди огромного файла?

Я имею огромный файл журнала приблизительно 3,5 ГБ и хотел бы выбрать случайные разделы посреди, говорят, что 10 МБ в целях отладки, что делает мое приложение.

Я мог использовать команды головы или хвоста для получения начала или конца файла, как я могу захватить произвольную часть с середины файла? Я предполагаю, что мог сделать что-то как head -n 1.75GB | tail -n 10MB но это кажется неуклюжим, и я должен был бы определить номера строки для средней точки файла для получения 1.75 ГБ и количества строки 10 МБ.

3
задан 23.04.2011, 20:57

2 ответа

$ dd if=big_file.bin skip=1750 ibs=1MB count=10 of=big_file.bin.part

Вы могли бы хотеть провести некоторое время, читая и понимая dd.

6
ответ дан 07.12.2019, 22:59

Просто необходимо записать немного программы, чтобы искать на некоторое случайное пятно и считать некоторую сумму строк.

Пример в Python (читает одну строку, но можно изменить его):

def get_random_line():
    """Return a randomly selected line from a file."""
    import random
    fo = open("/some/file.txt")
    try:
        point = random.randrange(fo.size)
        fo.seek(point)
        c = fo.read(1)
        while c != '\n' and fo.tell() > 0:
            fo.seek(-2, 1)
            c = fo.read(1)
        line = fo.readline().strip()
    finally:
        fo.close()
    return line
1
ответ дан 07.12.2019, 22:59

Теги

Похожие вопросы