【问题标题】:Read a file from byte a until byte b从字节 a 到字节 b 读取文件
【发布时间】:2015-03-12 13:26:13
【问题描述】:
我主要想把一个大文件分成几个小文件。
我使用流是因为我不想将大文件保留在磁盘中。
我正在寻找类似于:
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
【问题讨论】:
标签:
file
sed
bigdata
head
【解决方案1】:
如果性能是一个问题,并且您使用的是大文件,我认为您会在dd 中使用更大的块大小,就像这样
dd bs=$a skip=1 if=filename | dd "bs=$((b-a))" count=1
【解决方案2】:
如果要从字节偏移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…)) 表示法。