从字节 a 到字节 b 读取文件

Read a file from byte a until byte b

我主要想把一个大文件分解成多个小文件。

我使用流是因为我不想将大文件保留在我的磁盘中。

我正在查看的内容类似于:

sed -n 'a,bp,' #this uses lines in file while i want bytes

或:

cat filename|head -c a| tail -c (a-b)  # this way takes too long with big files

如果要从字节偏移量a提取到字节偏移量b,可以使用dd命令:

dd bs=1 "skip=$a" "count=$(($b - $a))" if=filename

引号是可选的。要担心的主要问题是 shell 算法是否会处理大于 31 位 (2 GiB) 的偏移量。这很可能不会成为问题(例如,64 位 Bash 在 Mac OS X 上轻松处理 12 位数字),但如果您需要处理,请谨慎在 32 位系统上有非常大的文件。如果需要,您可以使用 bc 而不是内置的 $((…arithmetic…)) 表示法。

如果性能有问题,并且您使用的是大文件,我认为您在 dd 中使用更大的块会做得更好,就像这样

dd bs=$a skip=1 if=filename | dd "bs=$((b-a))" count=1