我有一个巨大的日志文件,大约 3.5 GB,并且想在 10 MB 的中间随机抽取一些部分,以便调试我的应用程序正在做什么。
我可以使用 head 或 tail 命令来获取文件的开头或结尾,如何从文件中间抓取任意部分?我想我可以做类似的事情,head -n 1.75GB | tail -n 10MB
但这似乎很笨拙,我需要确定文件中点的行数才能获得 1.75GB 和 10MB 的行数。
答案1
$ dd if=big_file.bin skip=1750 ibs=1MB count=10 of=big_file.bin.part
您可能需要花一些时间阅读和理解 dd。
答案2
您可以使用尾部,但要指定字节偏移量。
tail -c +$START_BYTE $file | head -c $LENGTH > newfile
这样,tail 可以直接跳到起点(不计算新行),并且一旦 head 匹配正确的长度,它就会停止运行。
答案3
您只需编写一个小程序来寻找某个随机位置并读取一定数量的行。
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