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

时间:2015-03-12 13:26:14

标签: file sed bigdata head

我想主要将一个大文件分成小文件。

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

我所看到的是类似于:

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

2 个答案:

答案 0 :(得分:3)

如果要从字节偏移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…))表示法。

答案 1 :(得分:3)

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

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