知识图谱增强的中文电子病历医学命名实体识别实践
2026/9/16 6:15:49
这个命令的核心作用是按指定规则将一个文件分割成多个小文件(split by context),区别于split按大小/行数拆分的简单逻辑,csplit支持按行号、正则表达式等“上下文”拆分,是处理日志、配置文件、文本数据的高效拆分工具。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
csplit[选项]源文件 拆分规则1[拆分规则2...]xx00、xx01、xx02… 命名的小文件(默认前缀xx);csplit的核心是“拆分规则”,支持行号、正则、重复拆分等多种方式,是该命令的灵魂:
| 规则类型 | 语法示例 | 作用说明 |
|---|---|---|
| 行号拆分 | csplit file.txt 10 | 在第10行之前拆分,生成xx00(1-9行)、xx01(10行及以后) |
| 行号范围 | csplit file.txt 10 20 | 拆分为3个文件:xx00(1-9)、xx01(10-19)、xx02(20+) |
| 正则拆分 | csplit file.txt /pattern/ | 在匹配pattern的行之前拆分,xx00(匹配行之前)、xx01(匹配行及以后) |
| 正则偏移 | csplit file.txt /pattern/+3 | 匹配pattern后,再往后偏移3行拆分 |
| 重复拆分 | csplit file.txt /pattern/ {n} | 按pattern重复拆分n次({*}表示无限次,直到文件结束) |
| 忽略大小写 | csplit file.txt /pattern/I | 正则匹配时忽略大小写(部分系统支持) |
配合拆分规则使用,自定义输出文件、行为等:
| 选项 | 作用 | 示例 |
|---|---|---|
-f 前缀 | 指定拆分文件的前缀(替代默认xx) | csplit -f log_ file.txt 100→ 生成log_00、log_01 |
-n 位数 | 指定拆分文件后缀的数字位数(默认2位) | csplit -n 3 file.txt 10→ 生成xx000、xx001 |
-k | 即使拆分出错,也保留已生成的文件 | csplit -k file.txt /nonexist/ |
-s | 静默模式,不输出拆分后的文件字节数 | csplit -s file.txt 50 |
-z | 忽略空文件(拆分后若某文件为空则删除) | csplit -z file.txt /^$/ {*} |
以一个典型的日志文件app.log为例(内容模拟按日期分隔的应用日志):
# app.log 内容 2026-01-28 08:00: [INFO] 启动成功 2026-01-28 09:00: [ERROR] 数据库连接失败 2026-01-29 08:00: [INFO] 重启服务 2026-01-29 10:00: [WARN] 内存使用率过高 2026-01-30 07:00: [INFO] 备份数据完成将日志拆分为前2行、剩余行两个文件,自定义前缀为log_,后缀3位:
csplit-f log_ -n3app.log3log_000(1-2行)、log_001(3-5行);-s静默)。按日期2026-01-29拆分,将不同日期的日志分开:
csplit-f day_ app.log /2026-01-29/day_00(2026-01-28的日志)、day_01(2026-01-29及以后的日志);若文件按空行分隔成多个段落(如多篇文章),拆分所有段落:
# 先准备含空行的文件:text.txt# 内容:# 第一段内容...## 第二段内容...## 第三段内容...csplit-z text.txt /^$/{*}/^$/:匹配空行;{*}:重复拆分直到文件结束;-z:删除拆分出的空文件;xx00(第一段)、xx01(第二段)、xx02(第三段)。匹配ERROR后,往后偏移1行拆分(不包含ERROR行在第一个文件):
csplitapp.log /ERROR/+1xx00:1-2行(包含ERROR行);xx01:3-5行(ERROR行的下一行开始)。split命令的核心区别csplit和split都是拆分文件,但适用场景完全不同,按需选择:
| 命令 | 拆分依据 | 文件名规则 | 核心优势 | 适用场景 |
|---|---|---|---|---|
csplit | 行号、正则、上下文 | 自定义前缀+数字后缀 | 按内容/规则拆分,灵活 | 日志按日期/关键词拆分、文本按段落拆分 |
split | 文件大小、固定行数 | xaa、xab、xac… | 简单粗暴,按大小拆分 | 大文件按MB/GB拆分、按固定行数拆分 |
csplit使用基本正则表达式(BRE),特殊字符(如.、*)需转义(加\);xx00等文件,拆分时会直接覆盖,建议先用-f指定唯一前缀;N拆分时,第N行归到第二个文件(拆分点在N行之前);-z自动删除,避免冗余。csplit是按内容/规则拆分文件的工具,核心是“拆分规则”(行号/正则/重复),区别于split的按大小/行数拆分;csplit -f 前缀 文件名 /关键词/ {*})、按空行拆分文本(csplit -z 文件名 /^$/ {*});-f(前缀)、-n(位数)、-z(删空文件)、-s(静默)。