我想主要将一个大文件分成小文件。
我使用流,因为我不想将大文件保留在我的磁盘中。
我所看到的是类似于:
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
答案 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