问题
使用 -b 参数按字节切割文件时,可能会把一行切断:
1 | split -b 100m file.txt file_part_ |
如果文件是按行存储的记录,这会导致某些行被切成两半,无法正确解析。
解决方案
使用 -C 参数代替 -b,保证在完整的行结束处切割:
1 | split -C 100m file.txt file_part_ |
-b 和 -C 的区别
| 参数 | 说明 | 特点 | 适用场景 |
|---|---|---|---|
-b |
按字节严格切割 | 在指定字节位置处切割,可能在行中间切断 | 二进制文件、不关心行完整性 |
-C |
按字节切割但保持行完整 | 确保在完整行结束处切割,文件可能略超指定大小 | 文本文件、需要保持行完整性 |
详细说明:
-b参数会在指定的字节位置严格切割文件,不考虑这个位置是否在一行的中间-C参数会保证每个输出文件在完整的行结束。如果到达指定字节数时正好在行中间,会将整行包含在当前文件中,导致文件大小略微超过指定值
测试示例
创建测试文件:
1 | echo "This is line 1 |
使用 -b 切割(会断行):
1 | split -b 25 testfile.txt test_b_ |
使用 -C 切割(不断行):
1 | split -C 25 testfile.txt test_C_ |
注意
-C参数在部分老版本 split 中不可用- 如果指定的字节数小于单行大小,
-C也无法避免断行 - 实际使用时建议设置合理的文件大小,如 100m、1g 等