You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何匹配含指定数字的行并拆分输出到对应文件

问题说明

现有file.txt文件,内容如下:

01_ABC_0000  AA
02_CDE_0000  BB
03_EFG_0000  CC
04_ABC_0001  DD
05_CDE_0001  EE
06_EFG_0001  FF

需要按规则拆分为两个文件:

  • file0.txt:保存第一字段末尾为0000的3行
  • file1.txt:保存第一字段末尾为0001的3行

此前尝试的提取命令仅能拿到第一字段末尾数字,无法完成文件拆分,且第一字段为下划线分隔格式,直接以下划线作为分隔符处理无法满足要求。

实现方案

方案1:单awk命令(推荐,无额外依赖,效率最高)

不需要拼接sed、不需要以下划线做分隔符,直接提取第一个字段的最后4位字符判断归属,整行写入对应文件即可:

awk '{
    suffix = substr($1, length($1)-3, 4)
    if (suffix == "0000") print > "file0.txt"
    if (suffix == "0001") print > "file1.txt"
}' file.txt

命令逻辑说明:

  • awk默认以空格作为字段分隔符,$1天然就是每行第一个字段(如01_ABC_0000),不需要额外处理分隔规则
  • substr($1, length($1)-3, 4)直接取第一个字段的最后4位字符,完全不关心字段内部的下划线分布,适配下划线分隔不好处理的问题
  • 匹配到对应后缀的行直接写入目标文件,不需要生成中间临时结果

方案2:grep命令(写法最简单)

如果确认0000/0001只会出现在第一字段末尾的位置,可以直接用grep匹配写入:

grep "_0000[[:space:]]" file.txt > file0.txt
grep "_0001[[:space:]]" file.txt > file1.txt

匹配规则限定了后缀前面是下划线、后面是空白字符,不会误匹配行内其他位置的相同数字串。

执行完上述任意一种方案后,直接查看file0.txt和file1.txt即可得到预期的拆分结果。

内容的提问来源于stack exchange,提问作者user18091468

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:27:25