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

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

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

26
задан WilliamKF
12.04.2023 20:44 Количество просмотров материала 2843
Распечатать страницу

3 ответа

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

вы можете потратить некоторое время на чтение и понимание dd.

6
отвечен kmkkmk 2023-04-14 04:32

вы можете использовать хвост, но укажите смещение байта.

tail -c +$START_BYTE $file | head -c $LENGTH > newfile

таким образом, хвост может перейти непосредственно к начальной точке (без подсчета новых линий), и как только голова соответствует правильной длине, она перестает работать.

4
отвечен user1278519 2023-04-14 06:49

вам просто нужно написать небольшую программу, чтобы найти какое-то случайное место и прочитать некоторое количество строк.

пример на 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
отвечен Keith 2023-04-14 09:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх