我正在尝试验证是否将大文件正确拆分为多个部分。作为一个玩具示例,我有一个文件out_sample
:
123456789012
123456789012
123456789012
123456789012
123456789012
存储时有 64 个字节。当我使用 cut 将该文件分成六块时,生成的文件每个有 15 个字节:
#!/bin/sh
FILENAME="out_sample"
cut -c1-2 $FILENAME > a
cut -c3-4 $FILENAME > b
cut -c5-6 $FILENAME > c
cut -c7-8 $FILENAME > d
cut -c9-10 $FILENAME > e
cut -c11-12 $FILENAME > f
总共意味着 6*15=90 字节。原始文件大小与新文件大小总和之间的 26 字节相差多少?我注意到cut
在文件末尾附加换行符,这可能是每个文件 1 个字节?剩下的呢?
答案1
当您从文件中剪切 2 列时,cut
会在每行上添加一个换行符。因此,每个输出文件由 5 行组成,每行有 2 个数字和一个换行符。
这解释了 25 个额外字节(文件 1 到 5;第六个文件仅添加了您通过删除第 13 列(输入文件中的换行符)而丢弃的换行符)。
最后一个字节来自哪里?我假设您使用的编辑器不会在输入文件的最后一行强制换行。
所以什么都没有丢失。
答案2
对于此应用程序,您可能希望使用split
而不是cut
.split -b 15 $FILENAME
应该管用。它会自动进行簿记,而不是让您自己计算文件偏移量。
编辑:误读了问题;该split
命令不会按列拆分,就像字节流中的块一样。如果你真的想要按列,OP的方法可能是最好的。