BASH按条件拆分文件:将input.txt拆分为day.txt等目标文件
用AWK快速实现分类文件拆分
针对你需要按>xxx_前缀拆分input.txt的需求,用AWK脚本是最简洁高效的方案,不需要复杂的编程语言,一行命令就能搞定!
核心思路
遍历input.txt的每一行:
- 遇到以
>开头的行时,提取>之后的前缀(比如day、month)作为目标文件名的基础 - 把当前行直接追加到对应前缀的txt文件中,完美匹配你要的“对应类别标题行+内容”的需求
具体实现
方法1:单行命令直接执行
打开终端,切换到input.txt所在目录,运行以下命令:
awk '/^>/ { # 去掉行首的>,用下划线分割出类别名 split(substr($0, 2), parts, "_") target_file = parts[1] ".txt" } { # 将当前行追加到目标文件 print >> target_file # 关闭文件避免句柄耗尽 close(target_file) }' input.txt
方法2:写成AWK脚本文件(更易维护)
创建一个名为split_categories.awk的文件,内容如下:
# 匹配以>开头的行,确定目标文件 /^>/ { # 移除开头的>,比如把">day_1 ABC..."变成"day_1 ABC..." line_without_gt = substr($0, 2) # 用下划线分割,取第一部分作为类别名 split(line_without_gt, category_parts, "_") target_filename = category_parts[1] ".txt" } # 对所有行执行:写入目标文件并关闭 { print >> target_filename close(target_filename) }
然后运行:
awk -f split_categories.awk input.txt
效果验证
执行后,你会得到完全符合预期的文件:
- day.txt内容:
day_1 ABC DEF GHI
day_2 JKL MNO PQR
day_3 STU VWX YZA
- month.txt内容:
month_1 BCD EFG HIJ
month_2 KLM NOP QRS
如果input.txt里新增>year_1 XYZ 123这类行,脚本会自动生成year.txt并写入对应内容,完全适配扩展的类别。
注意事项
- 确保你的系统安装了AWK(Linux/macOS默认自带,Windows可以通过Git Bash或WSL运行)
- 如果目标文件已经存在,命令会追加内容而不是覆盖;如果需要覆盖,可在运行前先删除对应的txt文件,或者在脚本里添加首次写入时清空文件的逻辑
内容的提问来源于stack exchange,提问作者user9467855
相关产品推荐
相关产品推荐

