我知道这一点,head
并且tail
可以-c
选择指定字节偏移量。我正在寻找一种从大型日志文件中高效提取字节范围的方法。
答案1
Unix 命令的 DareDevildd
来救援!
dd if=yourfile ibs=1 skip=200 count=100
这将从字节 200 开始并显示接下来的 100 个字节,换句话说,字节 200-300。这ibs
意味着 dd 每次只读取一个字节,而不是默认的 512 个字节,但仍然以默认的 512 字节块写出。去看看这是否ibs
会损害性能,我希望不会。
答案2
如果您对字节感兴趣,那么会od
更感兴趣。
-j, --skip-bytes=bytes
-N, --read-bytes=bytes
因此要读取从字节 1024 开始的 16 个字节,并以 ascii 格式输出
od -j 1024 -N 16 -a /bin/sh
答案3
您可以使用dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks
(可能使用 来bs=1
获取一字节块,否则它将使用 512 字节块)。不过,不确定告诉它一次写入一个字节的效率如何。
答案4
我知道这已经过时了,并要求在标题中使用“linux”命令,但 python 非常适合这个,并且大多数 linux 发行版都附带了它。它就像这样简单:
python -c 'f=open("myfile.txt","rb");f.seek(100);print(f.read(100));f.close()' | SomeOtherProgram
f.seek(n,0)
从程序开始处开始 n 个字节,并f.read(n)
读取您想要的字节数。
我还没有找到任何其他可以让事情变得如此简单的选项。