从字节 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
我主要想把一个大文件分解成多个小文件。
我使用流是因为我不想将大文件保留在我的磁盘中。
我正在查看的内容类似于:
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