如何从unix/linux上的文件中获取任意块

kev*_*inm 11 unix bash shell

我正在尝试将一个块从一个二进制文件复制到一个新文件中.我有字节偏移和我想要抓取的块的长度.

我已经尝试过使用该dd实用程序,但这似乎是读取并丢弃数据到偏移量,而不仅仅是寻找(我猜因为dd用于复制/转换数据块).这使得它非常慢(偏移越高,速度越慢.这是我尝试的命令:

dd if=inputfile ibs=1 skip=$offset count=$datalength of=outputfile
Run Code Online (Sandbox Code Playgroud)

我想我可以编写一个小的perl/python /无论什么脚本来打开文件,寻找偏移量,然后以块的形式读取和写入所需数量的数据.

是否有支持此类内容的实用程序?

Mar*_*off 13

您可以使用tail -c+N从输入中修剪前导N个字节,然后您可以使用head -cM它仅输出其输入中的前M个字节.

$ echo "hello world 1234567890" | tail -c+9 | head -c6
rld 12
Run Code Online (Sandbox Code Playgroud)

所以使用你的变量,它可能是:

tail -c+$offset inputfile | head -c$datalength > outputfile
Run Code Online (Sandbox Code Playgroud)


啊,没看到它必须寻求.将此作为CW.


pix*_*eat 10

是的,今天用dd做这件事很尴尬.我们正在考虑将core_tiltes和count_bytes参数添加到coreutils中的dd来提供帮助.以下应该工作:

#!/bin/sh

bs=100000
infile=$1
skip=$2
length=$3

(
  dd bs=1 skip=$skip count=0
  dd bs=$bs count=$(($length / $bs))
  dd bs=$(($length % $bs)) count=1
) < "$infile"
Run Code Online (Sandbox Code Playgroud)