在 bash 中是否可以从任意字节计数偏移量开始读取文件?

Pet*_*r.O 27 filesystems bash text-processing

我想找到一个位于 8 GB 日志(文本)中的日期。

我有点绕行一个完整的顺序读取,和第一可以做文件的二元分割(大小),或以某种方式浏览文件系统inodes(这是我知道的非常少约),开始从各个分割点读,直到我找到一个合适的距离偏移从哪里开始我的文本搜索包含日期的行?

tail对最后一行的读取不使用正常的顺序读取,所以我想知道这个工具是否在 bash 中可用,或者我是否需要使用 Python 或 C/C++ ......但我对一个bash选项特别感兴趣..

小智 35

听起来你想要:

tail -c +1048576
Run Code Online (Sandbox Code Playgroud)

或您想跳过的任何字节数。加号告诉 tail 从文件的开头而不是结尾开始测量。如果您使用的是 GNU 版本的 tail,您可以将其写为:

tail -c +1M
Run Code Online (Sandbox Code Playgroud)

要在剪切后获得固定数量的字节,而不是文件的所有其余部分,只需通过 head 管道即可:

tail -c +1048576 | head -c 1024
Run Code Online (Sandbox Code Playgroud)


aki*_*ira 11

for (( block = 0; block < 16; block += 1 ))
do 
    echo $block; 
    dd if=INPUTFILE skip=$((block*512))MB bs=64 count=1 status=noxfer 2> /dev/null | \
        head -n 1
done
Run Code Online (Sandbox Code Playgroud)

.. 不创建临时拆分文件,每次运行时跳过块 * 512MB 的数据,从该位置读取 64 个字节并将输出限制为该 64 个字节的第一行。

您可能想将 64 调整为您认为需要的任何值。