$ dd if=big_file.bin skip=1750 ibs=1MB count=10 of=big_file.bin.part
Вы можете потратить некоторое время на чтение и понимание дд.
У меня огромный лог-файл размером около 3,5 ГБ, и я хотел бы отобрать случайные разделы в середине, скажем, 10 МБ для отладки того, что делает мое приложение.
Я мог бы использовать команды head или tail, чтобы получить начало или конец файла, как я могу получить произвольную часть от середины файла? Я думаю, я мог бы сделать что-то подобное, head -n 1.75GB | tail -n 10MB
но это кажется неуклюжим, и мне нужно было бы определить номера строк для средней точки файла, чтобы получить количество строк 1,75 ГБ и 10 МБ.
$ dd if=big_file.bin skip=1750 ibs=1MB count=10 of=big_file.bin.part
Вы можете потратить некоторое время на чтение и понимание дд.
You can use use tail, but by specify a byte offset.
tail -c +$START_BYTE $file | head -c $LENGTH > newfile
That way tail can jump directly to the starting point (without counting new lines) and once head matches the correct length, it stops running.
Вам просто нужно написать небольшую программу, чтобы найти какое-то случайное место и прочитать некоторое количество строк.
Пример на 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