Linux下使用split拆分大文件 按大小或行数分割

Linux下使用split拆分大文件 按大小或行数分割

系统教程

用 split 按大小(-b)或行数(-l)分割文件,需合理选用 -d、-a、--numeric-suffixes 等参数控制命名,避免默认 xaa 后缀;-C 保证行完整,-n l/N 实现均衡分片,切前取表头、切后验证编号连续性与行数总和,再 cat 合并。

直接用 split 就能搞定,不用写脚本、不依赖额外工具。关键在选对参数组合,否则容易生成一堆难识别的 xaaxab 文件,或者切得不均匀、最后一块太小。

按大小分割:-b 参数必须带单位

split -b 按字节切,但单位不能省——-b 100 是 100 字节,不是 100MB。split -b 100m 才是 100 兆(注意小写 m),kg 同理。大写 M 也认,但部分老系统只支持小写,稳妥起见统一用小写。

  • 切 50MB 的 SQL 导出文件:split -b 50m users.sql users_part_
  • 想让文件名带 4 位数字后缀(如 users_part_0000):split -b 50m -d -a 4 users.sql users_part_
  • 如果某行超长(比如日志里一条 JSON 占几 MB),-b 会硬切,可能破坏单行完整性;此时该用 -C--line-bytes),它保证每行不被截断,但文件大小会略超设定值

按行数分割:-l 参数最常用但要注意边界

split -l 看似简单,实际最容易踩坑的是“最后一块太小”。比如 split -l 1000 big.log,若总行数是 10050,会生成 10 个满 1000 行的文件 + 1 个只有 50 行的 xaj。这在后续并行处理时可能出错。

  • 强制平均分到 N 个文件(不管行数是否整除):split -n l/3 big.log part_ → 拆成 3 份,行数尽量均衡
  • 保留表头到每个分片(如 CSV):split 本身做不到,得先用 head -n1 提取表头,再用 tail -n+2 跳过表头后切,最后给每个分片加回去
  • 避免默认字母后缀(xaa)难排序:-d 必加,再配合 -a 控制位数,例如 split -l 5000 -d -a 3 data.csv chunk_ 生成 chunk_000chunk_001

文件名控制:前缀、后缀、起始编号别漏设

没指定前缀时,默认输出 xaaxab,这些名字既无意义又难排序。更麻烦的是,-d 默认从 0 开始编号,但有时你希望第一块叫 _001 而不是 _000,或从某个偏移开始续切。

Swoole linux版

Swoole 是一款面向生产环境的 PHP 异步网络通信引擎,专为 Linux 操作系统设计(同时支持 FreeBSD 和 macOS)。它采用纯 C 语言编写,作为 PHP 扩展运行后会接管程序控制权并进入事件循环。区别于传统 Web 框架,Swoole 使 PHP 开发者能够编写高性能的异步并发 TCP、UDP、WebSocket 服务,并支持协程与毫秒定时器,广泛应用于物联网、网络游戏等高性能场景。

下载

  • 指定前缀:split -b 100m -d access.log log_log_00log_01
  • 控制后缀长度(避免 log_00000 过长):-a 3log_000log_999
  • 从指定数字开始编号:--numeric-suffixes=100 → 第一个文件是 log_100,适合追加切分场景
  • 加扩展名(如 .log):--additional-suffix=.loglog_000.log,注意这个参数必须放在最后

验证与合并:别跳过这步

切完不验证,合并时才发现少一块或顺序错,就白忙了。尤其用 -d 时,文件名虽可排序,但若中间缺文件(比如磁盘满导致某块没写完),cat chunk_* > merged 会静默跳过缺失项,结果不完整。

  • 检查是否连续:ls chunk_* | head -n5; ls chunk_* | tail -n5 看首尾编号
  • 快速校验行数总和:wc -l chunk_* 最后一行的总计应 ≈ 原文件 wc -l 结果
  • 合并命令很简单:cat chunk_* > merged.log,但务必确保 shell 展开顺序正确——数字后缀天然有序,字母后缀(xaaxab)也按字典序展开,一般没问题

真正麻烦的不是怎么切,而是切完之后怎么让下游工具(比如 Python 脚本或 Spark)能稳定识别、加载、不漏不重。所以命名规则和编号连续性比切法本身更重要,别省那几个参数。

本文地址:https://www.sztg.com.cn/article/670581.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢