Linux命令从文件中检索字节范围


15

我知道,headtail可以采取-c的选项来指定一个字节偏移。我正在寻找一种有效地从大型日志文件中提取字节范围的方法。

Answers:


17

Unix命令的DareDevil,dd可以救救!

dd if=yourfile ibs=1 skip=200 count=100

从字节200开始,显示下一个100字节,换句话说,显示200-300字节。ibs意味着dd一次只能读取一个字节,而不是默认的512字节,但仍以默认的512字节块写入。去看看是否会ibs损害性能,我希望不会。


对于782090815字节的文件,我得到了以下时间: time dd if=file.txt | wc -l= 00:00:03s。time dd if=file.txt ibs=1 count=782090815 | wc -l= 9:05:19
Danilo SouzaMorães19年

11

如果您对字节感兴趣,那么od会更感兴趣。

-j, --skip-bytes=bytes
-N, --read-bytes=bytes

因此要读取从字节1024开始的16个字节,并以ascii输出

od -j 1024 -N 16 -a /bin/sh

4

您可以使用dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(可能使用with bs=1获得一个字节的块,否则它使用512字节的块)。不过,不确定告诉它一次写入一个字节有多有效。


好吧,如果您担心效率问题,dd可以将2个管道连接在一起(第一个可以切掉脂肪块,第二个可以在管道上做得很好,而不是磁盘上),但是dd不仅bs分离ibs而且obs还可以,所以至少它可以输出比读取更大的块。
poige 2012年

1

假设文件不是太大(例如,几个GB左右),则从一个管道到另一个管道的管道传输将达到您所需要的效率,而无需编写自己的程序即可。

head ... file | tail ...

(或者相反。以任何一个为准。)


1
尾部应先偏移较大,否则头部输出的开头将被丢弃。
proski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.