问题

使用 -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
2
3
4
5
echo "This is line 1
This is line 2
This is line 3
This is line 4
This is line 5" > testfile.txt

使用 -b 切割(会断行):

1
2
split -b 25 testfile.txt test_b_
# test_b_aa 和 test_b_ab 可能在行中间切断

使用 -C 切割(不断行):

1
2
split -C 25 testfile.txt test_C_
# test_C_aa 和 test_C_ab 在完整行结束处切割

注意

  • -C 参数在部分老版本 split 中不可用
  • 如果指定的字节数小于单行大小,-C 也无法避免断行
  • 实际使用时建议设置合理的文件大小,如 100m、1g 等